作为函数参数传递的向量初始值设定项列表

use*_*261 7 c++ initialization vector c++11

我有一个接收std::vector<int>这样的函数:

void foo(std::vector<int>);
Run Code Online (Sandbox Code Playgroud)

我想foo()用动态生成的小向量反复调用。我试图使用初始化列表动态创建一个新向量,但它似乎分配了一个大小为n的向量,而不是初始化它。

例如:

foo(std::vector<int> { 1});
foo(std::vector<int> { 4});
foo(std::vector<int> { 5});
Run Code Online (Sandbox Code Playgroud)

它似乎创建了 3 个向量,分别分配给 1、4 和 5 个默认 (0) 元素。

相反,我想创建 3 个大小为 1,但值为 1、4 和 5 的向量。我知道我可以使用构造函数 (n, value),如vector<int>(1,1)、(1,4) 和 (1, 5),但就我的理解而言,我想了解为什么我的初始化列表没有按照我的期望去做。

Nik*_*Nik 8

声明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;
}
Run Code Online (Sandbox Code Playgroud)