所以我一直在阅读多个(和重新发布的)c ++书籍并学习矢量,他们都告诉我要定义一个这样的矢量:
vector<int> v1 = {4 ,3 ,5};
Run Code Online (Sandbox Code Playgroud)
但是当我编译它时(我在代码块中使用gnu gcc编译器)它会出现这个错误
在c ++ 98中,'v1'必须由构造函数初始化,而不是由'{...}'初始化, 并且我还得到另一个那个sais:无法从'大括号封装初始化列表'中转换'{ 4,3,5 }'到'std :: vector v1'
如果你能帮助我,我会非常感激.我确实包括了矢量库.
Moh*_*ain 13
您使用的初始化被调用,initializer list并且从c ++ 11开始支持它.
要确保编译代码,请使用C++11或稍后-std选项.或者一般来说,不要使用C++98.
如果您使用的是g ++,请阅读:使用g ++ 编译C++ 11
来自评论OP正在使用代码块.在点击编译按钮之前,您可以使用以下步骤:(来源:如何向Code :: Blocks编译器添加C++ 11支持?)
- 转到工具栏 - >设置 - >编译器
- 在"Selected compiler"下拉菜单中,确保选中"GNU GCC Compiler"
- 在下面,选择"编译器设置"选项卡,然后选择下面的"编译器标志"选项卡
- 在下面的列表中,确保选中"让g ++遵循C++ 11 ISO C++语言标准[-std = c ++ 11]"复选框
- 单击"确定"保存
C++ 98 Standard不支持初始化列表来初始化标准容器.
尝试根据C++ 2011 Standard设置适当的编译器选项来编译代码.
另一种方法是单独向矢量添加元素
std::vector<int> v1;
v1.reserve( 3 );
v1.push_back( 4 );
v1.push_back( 3 );
v1.push_back( 5 );
Run Code Online (Sandbox Code Playgroud)
push_back您可以使用重载运算符代替成员函数+=.例如
std::vector<int> v1;
v1.reserve( 3 );
v1 += 4;
v1 += 3;
v1 += 5;
Run Code Online (Sandbox Code Playgroud)
或者使用类似的数组
const size_t N = 3;
int a[N] = { 4, 3, 5 };
std::vector<int> v1( a, a + N );
Run Code Online (Sandbox Code Playgroud)