向量列表初始化器和赋值
vector list initializer and assignment
这两段代码,第二段我没看懂
第一个:它按预期打印 0 1 2
vector<int> ivec;
ivec={0,1,2};
for(auto i: ivec){
cout<<ivec[i]<<endl;
}
2nd: 它打印 0 0 0 5. 这个随机值是如何产生的?
vector<int> ivec;
ivec={0,1,2};
ivec={4,5,9,1};
for(auto i: ivec){
cout<<ivec[i]<<endl;
}
这是未定义的行为,因为 ivec
的大小为 4
,但您正在索引元素,例如 4
、5
和 9
范围。
for(auto i : ivec){
cout << ivec[i] << endl;
}
相反,您应该自己打印元素
for(auto i : ivec){
cout << i << endl;
}
要清楚,在基于范围的 for
循环中 i
是实际元素 而不是 元素的索引。如果您想使用索引,则不会使用基于范围的 for
循环
for(std::size_t i = 0; i < ivec.size(); ++i){
cout << ivec[i] << endl;
}
这里循环:
for(auto i : ivec)
与
不一样
for(int i =0; ...)
当你这样做时
for(auto i: ivec){ // with ivec value to {4,5,9,1};
cout<<ivec[i]<<endl;
}
然后你做:
cout << ivec[4] << endl; // Undefined Behav...
cout << ivec[5] << endl; // Undefined Behav...
cout << ivec[9] << endl; // Undefined Behav...
这两段代码,第二段我没看懂
第一个:它按预期打印 0 1 2
vector<int> ivec;
ivec={0,1,2};
for(auto i: ivec){
cout<<ivec[i]<<endl;
}
2nd: 它打印 0 0 0 5. 这个随机值是如何产生的?
vector<int> ivec;
ivec={0,1,2};
ivec={4,5,9,1};
for(auto i: ivec){
cout<<ivec[i]<<endl;
}
这是未定义的行为,因为 ivec
的大小为 4
,但您正在索引元素,例如 4
、5
和 9
范围。
for(auto i : ivec){
cout << ivec[i] << endl;
}
相反,您应该自己打印元素
for(auto i : ivec){
cout << i << endl;
}
要清楚,在基于范围的 for
循环中 i
是实际元素 而不是 元素的索引。如果您想使用索引,则不会使用基于范围的 for
循环
for(std::size_t i = 0; i < ivec.size(); ++i){
cout << ivec[i] << endl;
}
这里循环:
for(auto i : ivec)
与
不一样for(int i =0; ...)
当你这样做时
for(auto i: ivec){ // with ivec value to {4,5,9,1};
cout<<ivec[i]<<endl;
}
然后你做:
cout << ivec[4] << endl; // Undefined Behav...
cout << ivec[5] << endl; // Undefined Behav...
cout << ivec[9] << endl; // Undefined Behav...