我一直在使用Code :: Blocks和MingW编译器中的值进行以下向量初始化:
vector<int> v0 {1,2,3,4};
之后我不得不将代码移动到visual studio项目(c ++)并尝试构建。我收到以下错误:
本地函数定义是非法的
Visual Studio编译器不支持这种初始化吗? 如何更改代码以使其兼容? 我想初始化vector并同时用值填充它,就像数组一样。
答案 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)
指定大小,列表是第二个参数。