簡體   English   中英

向量列表初始化器和賦值

[英]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但您正在索引超出范圍的元素,例如459

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM