[英]vector list initializer and assignment
對於這兩個代碼片段,我不明白第二個
第一個:它按預期打印 0 1 2
vector<int> ivec;
ivec={0,1,2};
for(auto i: ivec){
cout<<ivec[i]<<endl;
}
第二:它打印 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...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.