我们已经对C++ STL有一点了解了, 比如vector, list等等, 但是, 这些标准数据结构定义的操作是非常有限的,当然啦, 内置数组的操作也很少。 假设现在有这样一个需求, 要求内置数组的元素和, 求vector中的元素和, 求list中的元素和, 难道我们要搞三个算法吗? 非也, 我们可以引进泛型算法。 什么叫泛型算法呢? 其实, 泛型算法独立于特定的容器, 是对数据结构类型的抽象, 也就是说, 我不管你数据结构是咋样的, 我这个算法能够通用。

       下面, 我们来看看非常简单的一个例子, 以便感受一下泛型算法:

#include <iostream>
#include <vector>
#include <list>
#include <string>
#include <numeric> // 泛型算法函数accumulate
using namespace std;

int main()
{
	int a[10] = {0};
	int i = 1;
	for(i = 0; i < 10; i++)
	{
		a[i] = i + 1;
	}

	cout << accumulate(a, a + 10, 0) << endl; // 针对内置数组


	vector<int> v;
	for(i = 0; i < 10; i++)
	{
		v.push_back(i + 1);
	}

	cout << accumulate(v.begin(), v.end(), 0) << endl;  // 针对C++ STL vector

	list<int> L;
	for(i = 0; i < 10; i++)
	{
		L.push_back(i + 1);
	}

	cout << accumulate(L.begin(), L.end(), 0) << endl;  // 针对C++ STL list

	return 0;
}
        我们看到, 无论是对于内置数组, 还是vector, 还是list, 我们都是用的accumulate这一个函数, 这就是所谓的泛型算法(函数)。 通过本例, 我们可以感知到泛型算法的魅力和威力。 以后, 我们还会对泛型算法作更多的介绍, 让我们拭目以待。



Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐