C ++ STL_3アルゴリズム(セクション)

例えば、検索、ソート、コピー、並べ替え、変更、および他の標準的な数値計算アルゴリズムのような多くのアルゴリズムのSTLがあります。
STLアルゴリズムの高い適用性だけではなく、コンテナの唯一の使用に最適です。


ディレクトリ

(読むために適切な位置に移動し、青色のヘッダをクリックしてください)

  1. min_elementとmax_element
  2. ソート
  3. 見つけます
  4. 等しい
  5. 等しい

min_elementとmax_elementは
必要が2つのパラメータ、治療の即ち範囲を通過するときに、この関数を呼び出します。これは、最大または最小の要素にイテレータポインティングを返します。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
	Vector vec;
	Iterator p;
	for(int i = 0;i <= 10;i++)
		vec.push_back(rand() % 10);
	cout << "生成的序列:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	cout << endl;
	p = min_element(vec.begin(), vec.end());
	cout << *p << endl;
	p = max_element(vec.begin(), vec.end());
	cout << *p << endl;
	return 0;
}

結果の実装では、
ここに画像を挿入説明
注:最大または最小要素が唯一の時間でない場合に最大または最小要素の条件最初のイテレータ出会うを返します。


並び
替えソートアルゴリズムは、2つの間隔によって設定されたパラメータ内の要素として知られており、もちろん、照合がデフォルト(小から大へのデフォルト)またはソート基準を渡すことができます。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
	Vector vec;
	Iterator p;
	for(int i = 0;i <= 10;i++)
		vec.push_back(rand() % 10);
	cout << "生成的序列:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	cout << endl;
	sort(vec.begin(), vec.end());
	cout << "排序后:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	return 0;
}

結果の実装
ここに画像を挿入説明

自分の選挙のルール

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
template<class  T>
bool cmp(T a, T b)
{
	return a > b;
}
int main()
{
	Vector vec;
	Iterator p;
	for(int i = 0;i <= 10;i++)
		vec.push_back(rand() % 10);
	cout << "生成的序列:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	cout << endl;
	sort(vec.begin(), vec.end(),cmp<int>);
	cout << "排序后:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	return 0;
}

結果の実装が
ここに画像を挿入説明
あることに注意すべきmin_element and max_element機能は、計算の要素の境界の終わりを考慮していません。


見つからない
最後の要素の次の位置へのコンテナのイテレータへの早期復帰、それはイテレータへのポインタを返す場合、コンテナ内の要素を見つけます。

find(vec.negin(),vec.end(),value);//valu就是需要查找的值
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
	Vector vec;
	Iterator p;
	for(int i = 0;i <= 10;i++)
		vec.push_back(rand() % 10);
	cout << "生成的序列:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	cout << endl;
	p = find(vec.begin(), vec.end(), 2);
	if (p != vec.end())
		cout << *p << endl;
	else
		cout << "No" << endl;
	return 0;
}

結果の実装
ここに画像を挿入説明
注意vectorしていなかったfind機能は、それがされていない、存在しているvec.find(value)と呼ばれます。


reverse(vec.begin(),vec.end());//反转区间元素
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
	Vector vec;
	Iterator p;
	for(int i = 0;i <= 10;i++)
		vec.push_back(rand() % 10);
	cout << "生成的序列:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	cout << endl;
	reverse(vec.begin(), vec.end());
	cout << "reverse后结果" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	return 0;
}

結果の実装
ここに画像を挿入説明


同じ
euqal間隔が等しいかどうかを比較するために使用されます

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
	Vector vec;
	Iterator p;
	for(int i = 0;i <= 10;i++)
		vec.push_back(rand() % 10);
	Vector vec_2(vec);
	cout << "生成的序列vec:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	cout << endl;
	cout << "复制的序列vec_2:" << endl;
	for (auto tp : vec_2)
		cout << tp << " ";
	cout << endl;
	cout << "三个参数:"<<equal(vec.begin(), vec.end(), vec_2.begin()) << endl;
	cout << "四个参数:" << equal(vec.begin(), vec.end(), vec_2.begin(),vec_2.end()) << endl;
	vec_2.push_back(100);
	cout << "vec_2增加一个元素后比较结果" << endl;
	cout << "三个参数:" << equal(vec.begin(), vec.end(), vec_2.begin()) << endl;
	cout << "四个参数:" << equal(vec.begin(), vec.end(), vec_2.begin(), vec_2.end()) << endl;
	vec_2.pop_back();
	vec.push_back(111);
	cout << "vec增加一个元素后比较结果" << endl;
	cout << "三个参数:" << equal(vec.begin(), vec.end(), vec_2.begin()) << endl;
	cout << "四个参数:" << equal(vec.begin(), vec.end(), vec_2.begin(), vec_2.end()) << endl;
	return 0;
}

結果の実装
ここに画像を挿入説明
請求
三つのパラメータ:最初の2つのパラメータは、反復のシーケンスの開始および終了され、第三のパラメータが反復され、第二の配列であり、第1及び第2の配列の配列にシーケンスの最初の長さによって決定される要素の数を比較します。素子の第2の配列は第一配列未満に含まれる場合、結果は未定義です。

四つのパラメータ:開始と反復の終わりの配列、第二の配列の開始および終了反復子は、2つの配列の異なる長さの場合、結果は常に偽です。

もちろん、equa比較ルールは、以下のように書き換えることができます。

#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
typedef vector<int> Vector;
typedef Vector::iterator Iterator;
int main()
{
	Vector vec,vec_2;
	Iterator p;
	for(int i = 0;i <= 10;i++)
		vec.push_back(rand() % 10);
	cout << "生成的序列vec:" << endl;
	for (auto tp : vec)
		cout << tp << " ";
	cout << endl;
	for (int i = 0; i <= 10; i++)
		vec_2.push_back(rand() % 10);
	cout << endl;
	cout << "生成的序列vec_2:" << endl;
	for (auto tp : vec_2)
		cout << tp << " ";
	cout << endl;
	cout << "三个参数:" << equal(vec.begin(), vec.end(), vec_2.begin(), [](const int a, const int b) { return a == b; }) << endl;
	cout << "四个参数:" << equal(vec.begin(), vec.end(), vec_2.begin(),vec_2.end()) << endl;
	return 0;
}

結果の実装では、
ここに画像を挿入説明
ランダム配列、又はコンテナ内の要素のセットからマップを比較すること)(同じとはなりません。ランダム容器に、順番に所定の要素が与えられ、コンテナの異なる要素は、異なるグリッドに割り当てられる可能性があるため、別のコンテナを順不同に等しい要素の異なるセットに格納されてもよいです。(からこの結論c.biancheng.net


公開された222元の記事 ウォン称賛48 ビュー20000 +

おすすめ

転載: blog.csdn.net/qq_44116998/article/details/104570587