【问题标题】:Vector initializer list passed as a function parameter作为函数参数传递的向量初始化器列表
【发布时间】: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&lt;int&gt; (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


【解决方案1】:

声明 std::vector&lt;int&gt; { 1} 创建 1 个值为 1 的元素。创建的元素将在第 0 个位置具有值 1。

声明 std::vector&lt;int&gt; (1,6) 创建 1 个值为 6 的元素。创建的元素将在第 0 个位置具有值 6。

有问题的声明工作正常。

#include <iostream>
#include <vector>


void foo(std::vector<int> vec)
{
    std::cout<<"size of vec "<<vec.size()<<std::endl;

    for(int x =0; x < vec.size(); ++x)
    {
        std::cout<<vec[x]<<std::endl;
    }
    std::cout<<std::endl;
}

int main()
{
    foo(std::vector<int> { 1});
    foo(std::vector<int> { 4});
    foo(std::vector<int> { 5});
    foo(std::vector<int> (1,6));

   return 0;
}

【讨论】:

  • “分配1个值为2的元素”是什么意思?
  • @juanchopanza 我认为这意味着capacity() == 2
  • @Constructor 我对此表示严重怀疑!
  • @juanchopanza 这只是我的猜测。 :-)
  • @juanchopanza 感谢您指出错误,这只是一个打字错误。
猜你喜欢
  • 1970-01-01
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-24
  • 2016-06-14
相关资源
最近更新 更多