C++提高编程 5 STL -常用算法(遍历算法)
5 STL-常用算法
概述:
算法主要由头文件<algorithm>、<functional>、<numeric>组成;
<algorithm>是所有STL头文件中最大的,范围涉及到比较、交换、查找、遍历、复制、修改等;
<numeric>体积很小,只包括几个序列上面进行简单数学运算的模板函数
<functional>定义了一些模板类,用以声明函数对象
5.1 常用遍历算法
for_each //遍历容器
transform //搬运容器到另一个容器
5.1.1 for_each
功能描述:实现遍历容器
函数原型:for_each(iterator beg, iterator end, _func);
//beg开始迭代器 end结束迭代器 _func函数或者函数对象
#include<iostream> using namespace std; #include<vector> #include<algorithm> //常用遍历容器 for_each //普通函数 void print1(int val) { cout << val << " "; } //仿函数 class print2 { public: void operator()(int val) { cout << val << " "; } }; void test1() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } for_each(v.begin(), v.end(), print1); //使用for_each要加头文件 #include<algorithm> cout << endl; for_each(v.begin(), v.end(), print2()); cout << endl; } int main() { test1(); system("pause"); return 0; }

5.1.2 transform
功能描述:搬运容器到另一个容器中
函数原型:transform(iterator beg1, iterator end1, iterator beg2, _func);
//beg1(end1)源容器开始(结束)迭代器
//beg2 目标容器开始迭代器
//_func函数或者函数对象
#include<iostream> using namespace std; #include<vector> #include<algorithm> //常用遍历容器 transform //仿函数 class Transform { public: int operator()(int v) { return v + 100; } }; class print1 { public: void operator()(int val) { cout << val << " "; } }; void test1() { vector<int>v; for (int i = 0; i < 10; i++) { v.push_back(i); } vector<int>vTarget; //目标容器 vTarget.resize(v.size()); //目标容器需要提前开辟空间 transform(v.begin(), v.end(), vTarget.begin(), Transform()); for_each(vTarget.begin(), vTarget.end(), print1()); cout << endl; } int main() { test1(); system("pause"); return 0; }

浙公网安备 33010602011771号