天天看點

C++ 11 Range-based for loops

Range-based for loops (基于範圍的for循環)

    c++中 for_each(first, end,func) 主要是基于疊代器的原理,疊代器内含了自增操作。問題是必須告訴for循環體的界限範圍。

    為了在周遊容器時支援”foreach”用法,C++11擴充了for語句的文法。用這個新的寫法,可以周遊C類型的數組、初始化清單以及任何重載了非成員的begin()和end()函數的類型。如果你隻是想對集合或數組的每個元素做一些操作,而不關心下标、疊代器位置或者元素個數,那麼這種foreach的for循環将會非常有用。

需要注意的是---基于範圍的循環使用在标準庫的容器中時,如果使用auto來聲明疊代的對象,那麼這個對象不是疊代器對象,而是解引用後的對象值。

std::map<std::string, std::vector<int>> map;

std::vector<int> v;

v.push_back(1);

v.push_back(2);

v.push_back(3);

map["one"] = v;

for(const auto& kvp : map)   //for loops

{

std::cout << kvp.first << std::endl;

for(auto v : kvp.second)

{

std::cout << v << std::endl;

}

}

int arr[] = {1,2,3,4,5};

for(int& e : arr)

{

e = e*e;

}

繼續閱讀