向量初始化列表作为函数参数传递

时间:2014-05-26 02:38:28

标签: c++ c++11 vector initialization

我有一个接收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),但根据我的理解,我想了解为什么我的初始化列表没有按照我的预期进行。

1 个答案:

答案 0 :(得分:3)

声明std::vector<int> { 1}创建1个元素,其值为1.创建的元素在第0个位置的值为1。

声明std::vector<int> (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;
}