簡體   English   中英

基於范圍的 for 循環 vs 常規迭代器 for 循環

[英]range based for loop vs regular iterator for loop

考慮以下代碼示例:

#include<iostream>
#include<vector>
#include<typeinfo>

int main(){
    std::vector<int> v = {1 ,2,4};
    for(auto &i:v)  std::cout<<typeid(i).name();
    for(auto k = v.begin(); k!=v.end();++k) std::cout<<typeid(k).name();
    return 0;
}

第一個循環代表基於范圍的 for-loops ,第二個循環是帶有迭代器的常規 for 循環。 我經常使用常規的,根據我的經驗, auto k是迭代器類型,而基於范圍的循環的auto i類型為 int。 上述程序的輸出是:

i & N9__gnu_cxx17__normal_iteratorIPiSt6vectorIiSaIiEEEE

這是基於范圍的循環對像向量這樣的集合(某處提到)的正常行為嗎? 因為有人(像我一樣)會假設基於范圍的 for 循環只是常規 for 循環的簡寫。

答案是 Magnus 已經說過的:是的,這是正常行為 范圍循環適用於我們有興趣檢查集合中的每個項目(除非我們早點突破)並且對容器本身做任何事情不感興趣的情況。 就像已經說過的那樣,范圍循環以這種方式進行了優化,例如,它確實只計算了一次完成條件。 在我看來,這是對 C++ 中各種循環選項的一個非常好的和受歡迎的補充,因為我們確實經常面臨這種非常確切的情況:我們得到一個容器,並且有興趣簡單地在 const 或非常規時尚。

基於范圍的 for 循環將給出容器元素。

例如:

vectorv{5,7,10};

對於(自動 i:v)

cout<<i; //5,7,10

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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