for_each
原型:
template<class InputIterator, class Function>
Function for_each(InputIterator first, InputIterator last, Function fn)
{
while (first!=last) {
fn (*first);
++first;
}
return fn; // or, since C++11: return move(fn);
头文件
#include <algorithm>
vector遍历
for_each遍历vector
函数遍历
//遍历方法
void fun(int n)
{
std::cout << __FUNCTION__ << ":" << n << " ";
}
std::vector<int> array;
for(int i = 0;i < 10;i++)
{
array.push_back(i);
}
//遍历
std::for_each(array.begin(),array.end(),fun);
std::cout << std::endl;
lambda
std::for_each(array.begin(),array.end(),[](int var){
std::cout << "lambda:"<<var << " ";
});
std::cout << std::endl;
可以捕获外部变量
int n = 10;
std::for_each(array.begin(),array.end(),[&](int var){
std::cout << "lambda:"<<var+n << " ";
});
std::cout << std::endl;
类仿函数
class MyArray
{
public:
void operator()(int var)
{
std::cout << "myArray:" << var << " ";
};
};
MyArray myArray;
std::for_each(array.begin(),array.end(),myArray);
std::cout << std::endl;
for遍历vector
引用遍历,可修改值
for(auto& item:array){
item = item+100;
}
非引用遍历
for(auto item:array){
std::cout <<"item"<< item << " "<<std::endl;
}
map遍历
定义
std::map<int,std::string> m;
m[1]="1";
m[2]="2";
m[3]="3";
m[4]="4";
m[5]="5";
for_each遍历map
lambda
for_each(m.begin(),m.end(),[](std::map<int,std::string>::reference var){
std::cout << var.first << ":"<<var.second << std::endl;
});
函数
void funMap(std::map<int,std::string>::reference var)
{
std::cout << __FUNCTION__ << ":"<< var.first << ":"<<var.second << std::endl;
}
for_each(m.begin(),m.end(),funMap);
for 遍历map
for(auto& var:m){
//修改value
var.second =var.second.append("key");
std::cout << var.first << ":"<<var.second << std::endl;
}