问题标签 [stl]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
10 回答
2628 浏览

c++ - 优化 C++ 二维数组

我需要一种方法来表示 C++ 中双精度数的二维数组(密集矩阵),并且访问开销绝对最小。

我在各种 linux/unix 机器和 gcc 版本上做了一些计时。向量的 STL 向量,声明为:

并且通过matrix[i][j]访问比声明为的数组慢 5% 到 100% 访问:

通过内联索引函数访问matrix[index(i,j)]index(i,j)计算结果为 i+n*j。在没有 STL 的情况下安排二维数组的其他方法——一个指向每行开头的 n 个指针的数组,或者将堆栈上的整个事物定义为一个常数大小matrix[n][n]——以与索引函数方法几乎完全相同的速度运行。

最近的 GCC 版本 (> 4.0) 似乎能够在打开优化时将 STL 向量的向量编译到与非 STL 代码几乎相同的效率,但这在某种程度上取决于机器。

如果可能,我想使用 STL,但必须选择最快的解决方案。有没有人有使用 GCC 优化 STL 的经验?

0 投票
4 回答
7902 浏览

c++ - 如何在不暴露使用的容器的情况下暴露迭代器?

我已经使用 C# 有一段时间了,回到 C++ 是一件很头疼的事情。我正在尝试将我的一些实践从 C# 带到 C++,但我发现了一些阻力,我很乐意接受你的帮助。

我想为这样的类公开一个迭代器:

我在尝试一些不成问题的事情吗?我应该只是 typedef std::vector< T >::iterator 吗?我希望只依赖于迭代器,而不是实现容器......

0 投票
3 回答
5003 浏览

c++ - 如何从 wfstream 读取二进制数据?

我从文件中读取数据时遇到了小问题。我希望能够读取 wstring 以及任意大小的原始数据块(大小以字节为单位)。

也许我使用了错误的流,或者类似的东西。基本上,我想读取一个 wstring,数据的大小(可以是任意数量的字节),然后是那么多字节的组件数据。显然,我无法读取 char,因为模板假定为 wchar_t。

我可以读取 wchar_t,但必须确保数据按 sizeof(wchar_t) 对齐存储。否则,我最终可能会破坏流。一种情况是数据为 15 个字节。我必须读取 16 个字节,然后屏蔽不需要的字节,将流寻找到 15 个字节的偏移量(如果可能的话,使用 wchar_t 模板化?)以便能够读取下一个数据块。

显然,应该有更好的方法来实现我想要做的事情。

0 投票
3 回答
3147 浏览

c++ - 为嵌入式应用程序从 std::string 切换到 std::wstring?

到目前为止,我一直在我的嵌入式系统(路由器、交换机、电信设备等)的 C++ 应用程序中使用 std::string。

对于下一个项目,我正在考虑从 std::string 切换到 std::wstring 以获得 Unicode 支持。例如,这将允许最终用户在命令行界面 (CLI) 中使用中文字符。

我应该期待什么并发症/头痛/惊喜?例如,如果我使用仍然使用 std::string 的第三方库怎么办?

由于对国际字符串的支持对我所从事的嵌入式系统类型的要求并不那么强烈,因此我只会在不会引起严重头痛的情况下这样做。

0 投票
4 回答
3030 浏览

c++ - (重新)将向量初始化为具有初始值的特定长度

作为函数参数,我得到一个vector<double>& vec长度和值未知的(输出向量,因此是非常量)。我想将此向量初始化为全零的特定长度 n。

这将起作用

这也将起作用:

第二个效率更高(因为不涉及内存释放/分配)?有没有更有效的方法来做到这一点?

0 投票
15 回答
7179 浏览

c++ - 对于 STL 或 !STL,这是个问题

毫无疑问,我会选择将 STL 用于大多数 C++ 编程项目。然而,最近有人向我提出了这个问题,“有没有什么情况下你不会使用 STL?”...

我想得越多,我就越意识到也许应该在某些情况下我选择不使用 STL ......例如,一个非常大的长期项目,其代码库预计将持续数年......也许精确满足项目需求的定制容器解决方案值得最初的开销吗?你怎么看,有没有什么情况下你会选择不使用 STL?

0 投票
5 回答
2066 浏览

c++ - 围绕现有数组的 STL 非复制包装器?

是否可以为现有的 POD 类型元素数组创建一个类似 STL 的容器,甚至只是一个 STL 样式的迭代器?

例如,假设我有一个整数数组。能够调用一些 STL 函数(例如 find_if、count_if 或直接在此数组上排序)会很方便。

非解决方案:复制整个数组,甚至只是对元素的引用。目标是非常节省内存和时间,同时希望允许使用其他 STL 算法。

0 投票
3 回答
2742 浏览

c++ - 使用 STL map/set/multiset/multimap,如何找到第一个大于或等于搜索键的值?

假设我有一组值,存储在 std::set 中:

{1、2、6、8}

我有一个搜索键,比如 3。我想将 3 放入一个函数并获得大于或等于 3 的第一个值,在这种情况下,我想获得 6。

map/set/multimap/and set 中提供的 find() 函数当然会返回这种情况的结束迭代器。在这种情况下,是否有类似的函数可以返回 6?

0 投票
7 回答
10718 浏览

c++ - 使用 std::string 时出现 bad_alloc 错误

我目前正在开发一个依赖于我提供文件路径的项目(例如。C:\Path.pth)。现在,我昨天打电话给我std::string,一切正常:

但现在它不起作用。它抛出一个bad_alloc. 似乎 ' \' 字符是问题所在。我什至尝试将\x5C其用作它的 ascii 值,但结果相同。

现在,我的问题是,是否有可能我搞砸了一些#define、一些编译器选项或其他可能导致这种情况的“非代码”?我正在使用 VS 2005。

任何帮助将非常感激


皮埃尔BdR

.. 这听起来很有可能。或者至少,它必须:P

由于没有人提到某种 /SetStringCharSize:2bit-compiler 选项,我认为可以安全地假设我的代码必须在某处搞砸一些东西,而且它不仅仅是一个愚蠢的编译器选项(或类似的)是错误的。 .

0 投票
6 回答
10655 浏览

c++ - 迭代器..为什么要使用它们?

在 STL 库中,一些容器具有迭代器,并且通常认为它们是迭代这些容器的更好方法,而不是简单的 for 循环,例如

谁能告诉我为什么以及在什么情况下我应该使用迭代器以及在什么情况下上面的代码片段?