初步感受一下泛型算法---以accumulate作用于内置数组、vector和list为例
我们已经对C++ STL有一点了解了, 比如vector, list等等, 但是, 这些标准数据结构定义的操作是非常有限的,当然啦, 内置数组的操作也很少。 假设现在有这样一个需求, 要求内置数组的元素和, 求vector中的元素和, 求list中的元素和, 难道我们要搞三个算法吗? 非也, 我们可以引进泛型算法。 什么叫泛型算法呢? 其实, 泛型算法独立于特定的容器, 是对数据结构类型的抽象,
·
我们已经对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这一个函数, 这就是所谓的泛型算法(函数)。 通过本例, 我们可以感知到泛型算法的魅力和威力。 以后, 我们还会对泛型算法作更多的介绍, 让我们拭目以待。
更多推荐
已为社区贡献4条内容
所有评论(0)