1. 程式人生 > 其它 >STL常用演算法

STL常用演算法

1.STL-常用演算法

概述:

  • 演算法主要是由標頭檔案#include<algorithm>``#include<functional>``#inlcude<numeric>組成
  • #include<algorithm>是所有STL標頭檔案中最大的一個,範圍涉及到比較交換查詢遍歷操作複製修改等等
  • #include<functional>體積很小,只包括幾個在序列上面進行簡單數學運算的模板函式
  • #inlcude<numeric>定義了一些模板類,用以宣告函式物件

2.常用遍歷演算法

演算法簡介:

  • for_each
    遍歷容器
  • transform搬運容器到另一個容器

2.1 for_each

功能描述:

  • 實現遍歷容器

函式原型:

  • for_each(iterator beg,iterator end,_func);
    遍歷演算法,遍歷容器元素
    beg開始迭代器
    end結束迭代器
    _func函式或者函式物件
    示例:
#include<iostream>
using namespace std;
#include<vector>
#include<algorithm>
//常用遍歷演算法 fro_each
//普通函式
void print01(int v1)
{
	cout << v1 << " ";
}
//仿函式
class MyPrint
{
public:
	void operator()(int val)
	{
		cout << val << " ";
	}
};
void test01()
{
	vector<int>v;
	for (int i = 0; i < 10; i++)
	{
		v.push_back(i);
	}
	for_each(v.begin(), v.end(), print01);
	cout << endl;
	for_each(v.begin(), v.end(), MyPrint());//MyPrint()仿函式
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

running

0 1 2 3 4 5 6 7 8 9
0 1 2 3 4 5 6 7 8 9

2.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 val)
	{
		return val+10;//也可以做一些邏輯規則
	}
};
class MyPrint
{
public:
	void operator()(int val)
	{
		cout << val << " ";
	}
};
void test01()
{
	vector<int>v;
	for(int i = 0; i < 6; i++)
	{
		v.push_back(i);
	}
	vector<int>v2;//目標迭代器
	v2.resize(v.size());
	transform(v.begin(), v.end(), v2.begin(), Transform());//Transform()仿函式
	for_each(v2.begin(), v2.end(), MyPrint());//MyPrint()仿函式
	cout << endl;
}
int main()
{
	test01();
	system("pause");
	return 0;
}

running

10 11 12 13 14 15