C++每日一练(STL算法——for each)

167 阅读1分钟

本文已参与「新人创作礼活动」,一起开启掘金创作之路。

一、今日课题

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