本文已参与「新人创作礼活动」,一起开启掘金创作之路。
一、今日课题
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);
}
1)有何用?
假有一个类型为ContainerType类型的容器Container,它的每个元素的类型ElementType。 在C#中,数组就是这样一种容器。 在C++中,stl的vector、map等也是这样的容器。 如果要遍历容器Container的每个元素,在C#中可以使用如下代码:
foreach( ElementType element in Container)
{ // 使用element访问该元素
}
而在C++中,通常的代码都会是这样:
Container::iterator iter;
for (iter = Container.begin(); iter!=Container.end(); iter++)
{ // 使用(*iter)访问该元素
}
显然C#中的代码更清晰的多。而C++的代码中包含了变量声明和循环控制,显得更复杂了。
2)怎么用?
#include <algorithm>
#include <vector>
#include <iostream>
using namespace std;
int main()
{
int nums[3] = { 1, 2, 3 };
vector<int> vs = { 0, 1, 2, 3, 4 };
for (int num:nums)
{
cout << num <<" \t";
}
cout << endl;
for each(int v in vs)
{
cout << v << "\t";
}
system("pause");
return 0;
}