在Visual Studio Code中使用C++14时,vector初始化问题咨询
关于C++14中vector初始化与遍历的问题解答
先帮你梳理下这段代码的逻辑,再说说实际开发里需要注意的细节:
你的代码用C++11引入的列表初始化语法创建了一个包含3个int元素的vector,之后通过at()方法访问并修改元素。正常运行的话,它会输出:
a contains 5 5 5 a contains 8 8 8
不过这里有几个容易踩坑的点,给你提个醒:
别用独立常量绑定vector的大小:你定义了
const int SIZE = 3,但如果后续修改vector的初始化列表(比如改成{5,5}),SIZE还是3,这时候a.at(i)在i=2时会直接抛出std::out_of_range异常。更稳妥的做法是直接用a.size()获取vector的实际大小,比如把循环改成:for (int i = 0; i < a.size(); i++)或者用C++11及以后的范围for循环,代码更简洁安全:
for (int num : a) cout << num << ' ';区分列表初始化和填充初始化:
vector<int> a{5,5,5}是列表初始化,直接把括号里的元素放进vector;但如果写成vector<int> a(3,5),这是填充初始化,会创建一个有3个元素、每个元素都是5的vector,效果和你的代码一致。但如果写成vector<int> a{3,5},那就是创建包含3和5两个元素的vector,这点一定要区分清楚,别搞混了。关于
using namespace std;的小建议:测试代码里用这个很方便,但大型项目里不推荐,容易引发命名冲突——比如你自己定义的cout或者vector会和标准库的同名元素冲突。
如果你的代码运行报错(比如越界异常),大概率是SIZE和vector实际大小不一致导致的,换成a.size()就能解决问题。
内容的提问来源于stack exchange,提问作者Lydia
相关产品推荐
相关产品推荐

