【发布时间】:2014-07-14 17:54:30
【问题描述】:
我有一个接收std::vector<int> 的函数:
void foo(std::vector<int>);
我想用动态生成的小向量反复调用foo()。我试图使用初始化列表动态创建一个新向量,但它似乎分配了一个大小为 n 的向量,而不是对其进行初始化。
例如:
foo(std::vector<int> { 1});
foo(std::vector<int> { 4});
foo(std::vector<int> { 5});
似乎创建了 3 个向量,分别分配给 1、4 和 5 个默认 (0) 元素。
相反,我想创建 3 个大小为 1 的向量,但值为 1、4 和 5。我知道我可以使用构造函数 (n, value),例如 vector<int> (1,1), (1, 4) 和 (1,5),但根据我的理解,我想了解为什么我的初始化列表没有按照我的预期进行。
【问题讨论】:
-
应该可以。即使
foo({1});等也可以。 -
我得到了你所期望的行为。我使用 g++ 4.7.3 在 Linux 上对其进行了测试。你用的是什么平台?
-
我正在使用带有 clang 3.1 的嵌入式 Android。我正在为 Android 4.2.2 构建,arm 32 位。
-
我设法让它工作了,我不得不重新定义接受初始化列表的向量构造函数,其他地方正在做一些时髦的事情,现在已经修复了,谢谢!
-
在哪里做了什么时髦的事情?是 Clang 还是它的标准库中的问题?请为您自己的问题提供答案,也可以相应地编辑问题。
标签: c++ c++11 vector initialization