c ++向量初始化

时间:2012-03-05 23:36:52

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

我一直在使用Code :: Blocks和MingW编译器中的值进行以下向量初始化:

vector<int> v0 {1,2,3,4};

之后我不得不将代码移动到visual studio项目(c ++)并尝试构建。我收到以下错误:
本地函数定义是非法的

Visual Studio编译器不支持这种初始化吗? 如何更改代码以使其兼容? 我想初始化vector并同时用值填充它,就像数组一样。

5 个答案:

答案 0 :(得分:17)

Visual C ++尚不支持初始化列表。

最接近这种语法的方法是使用数组来保存初始化程序,然后使用范围构造函数:

std::array<int, 4> v0_init = { 1, 2, 3, 4 };
std::vector<int> v0(v0_init.begin(), v0_init.end());

答案 1 :(得分:4)

你几乎可以在VS2013中做到这一点

vector<int> v0{ { 1, 2, 3, 4 } };

完整示例

#include <vector>
#include <iostream>
int main()
{    
    using namespace std;
    vector<int> v0{ { 1, 2, 3, 4 } };
    for (auto& v : v0){
        cout << " " << v;
    }
    cout << endl;
    return 0;
}

答案 2 :(得分:1)

另一种选择是boost::assign

#include <boost/assign.hpp>


using namespace boost::assign;
vector<int> v;
v += 1,2,3,4;

答案 3 :(得分:0)

我定义了一个宏:

#define init_vector(type, name, ...)\
    const type _init_vector_##name[] { __VA_ARGS__ };\
    vector<type> name(_init_vector_##name, _init_vector_##name + _countof(_init_vector_##name))

并使用如下:

init_vector(string, spell, "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" );

for(auto &a : spell)
  std::cout<< a <<" ";

答案 4 :(得分:-3)

如果您使用Visual Studio 2015,则使用vector初始化list的方法是:

vector<int> v = {3, (1,2,3)};

因此,第一个参数(3)指定大小,列表是第二个参数。