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;
}