C ++標準テンプレートライブラリの一般的なアルゴリズムの使用の概要

アルゴリズムには多くのアルゴリズムが用意されていますが、コンテナーメンバー関数とグローバル関数(アルゴリズム)が同時に存在する場合、同じ名前のメンバー関数を使用することが優先されます。同じ名前のメンバー関数がない場合は、これらのアルゴリズムが考慮されます。

1. for_each(トラバーサル)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

void myfunc(int c)
{
	cout << c << endl;
}

class A
{
public:
	void operator()(int c)
	{
		cout << c << endl;
	}
};
int main()
{
	vector<int> vec = { 5,4,3,1,2 };

	//第一种调用方法,第三个参数传入一个函数
	for_each(vec.begin(), vec.end(), myfunc);


	//第二种调用方法,第三个参数传入一个仿函数
	for_each(vec.begin(), vec.end(), A());

	//第三种调用方法,第三个参数传入一个lambda表达式
	for_each(vec.begin(), vec.end(), [](int c) { cout<<c<<endl; });

	return 0;
}

リファレンスブログ:C ++模倣関数   C ++ラムダ式

2見つける

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
	vector<int> vec = { 5,4,3,1,2 };

	vector<int>::iterator finditer = find(vec.begin(), vec.end(), 400); //判断是否等于find的第二个参数,等于就没找到,不等于就找到了
	
	if (finditer != vec.end())
	{
		cout << "找到了" << endl;
	}
	else
	{
		cout << "没找到" << endl;
	}

	return 0;
}

3 find_if

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;

int main()
{
	vector<int> vec = { 5,4,3,1,2 };

	vector<int>::iterator finditer = find_if(vec.begin(), vec.end(), [](int c)
	{
		if (c < 3)
			return true;
		return false;
	}); 
	
	if (finditer != vec.end())
	{
		cout << "找到了:" <<*finditer<< endl;
	}
	else
	{
		cout << "没找到" << endl;
	}

	return 0;
}

4ソート(ベクターなどのランダムアクセス反復子を含むコンテナーのみをサポート)

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;


bool myfunc(int i, int j)
{
	if (i < j)
		return true;
	return false;
}

int main()
{
	vector<int> vec = { 5,4,3,1,2 };
	sort(vec.begin(), vec.end(), myfunc);

	for_each(vec.begin(), vec.end(), [](int c) {cout << c << endl; });

	return 0;
}

 

5補足

アルゴリズムには多くのアルゴリズムが用意されていますが、コンテナーメンバー関数とグローバル関数(アルゴリズム)が同時に存在する場合、同じ名前のメンバー関数を使用することが優先されます。同じ名前のメンバー関数がない場合は、これらのアルゴリズムが考慮されます。

公開された123元の記事 ウォン称賛31 ビュー90000 +

おすすめ

転載: blog.csdn.net/qq_40794602/article/details/103082621