C ++ STL_3 Algorithmus (Abschnitt)

Es gibt viele Algorithmen STL, wie Suchen, Sortieren, Kopieren, Neuordnen, Ändern und andere Standard - numerische Berechnungsalgorithmen.
Hohe Anwendbarkeit der STL Algorithmen ist nicht nur gut für den alleinigen Einsatz von Containern.


Verzeichnis

(Klicken Sie auf den blauen Header, gehen in die richtige Position zu lesen)

  1. min_element und max_element
  2. Sortieren
  3. finden
  4. umkehren
  5. gleich
  6. gleich

min_element und max_element
Aufruf dieser Funktionwenn die Notwendigkeitzwei Parameter zu übergeben, nämlich den Umfang der Behandlung. Es gibt den Iterator zeigt auf dem größten oder kleinsten Element.
Beispiele

#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;
}

Umsetzung der Ergebnisse
Hier hat Bild einfügen Beschreibung
Hinweis: Wenn das Maximal- oder Minimalelement ist nicht nur Zeit , kehrt der ersten Iterator erfüllt die Bedingungen des maximalen oder minimalen Elements.


das Sortieren
der Sortierung Sortieralgorithmus wird als ein Element innerhalb der Parameter bekanntdurch die zwei Intervalle festgelegt, selbstverständlich kann die Kollation der Standardwert (default von klein bis groß) oder ein Sortierkriterium übergeben.

#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;
}

Umsetzung der Ergebnisse
Hier hat Bild einfügen Beschreibung

Eigene Wahlregeln

#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;
}

Umsetzung der Ergebnisse
Hier hat Bild einfügen Beschreibung
ist zu beachten , dass min_element and max_elementdie Funktion nicht das Ende der Grenzen der Elemente bei der Berechnung nicht berücksichtigt.


finden
Sie ein Element in dem Behälter finden, wenn es einen Zeiger auf den Iterator zurückgibt, ohne baldige Rückkehr zum Behälter Iterator zur nächsten Position des letzten Elements.

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;
}

Die Umsetzung der Ergebnisse
Hier hat Bild einfügen Beschreibung
Aufmerksamkeit vectorund tat es nicht findFunktion vorhanden ist , wird es nicht vec.find(value)genannt.


umkehren

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;
}

Umsetzung der Ergebnisse
Hier hat Bild einfügen Beschreibung


gleich
euqal Intervall wird verwendetumGleichheit zu vergleichen

#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;
}

Umsetzung der Ergebnisse ,
Hier hat Bild einfügen Beschreibung
wobei
drei Parameter : die ersten beiden Parameter , der Anfang und das Ende einer Sequenz von Iterationen sind, ist ein dritte Parameter die Iteration die zweite Sequenz ist, dann wird die erste und zweite Sequenz zu einer Sequenz Vergleich der Anzahl der Elemente , die durch die erste Länge der Sequenz bestimmt wird . Wenn die zweite Folge von Elementen in weniger als die ersten Sequenz enthalten ist , wird das Ergebnis nicht definiert.

Vier Parameter : eine Sequenz von Start und Ende der Iteration, die zweite Sequenz beginnen und enden Iterator, wenn unterschiedliche Längen der zwei Sequenzen, das Ergebnis ist immer falsch.

Natürlich equakönnen die Vergleichsregeln wie folgt umgeschrieben werden

#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;
}

Umsetzung der Ergebnisse
Hier hat Bild einfügen Beschreibung
soll nicht mit gleichem () , um die Karte von einer Zufallsfolge zu vergleichen, oder eine Gruppe von Elementen in dem Behälter. In den Random - Containern, ein bestimmtes Element in der angegebenen Reihenfolge und in einem anderen Satz von Elementen , die gleich ungeordnetes anderen Container gelagert werden, da die verschiedenen Elemente des Behälters wahrscheinlich zu einem anderen Raster zugeordnet werden soll. (Diese Schlussfolgerung aus c.biancheng.net )


Veröffentlicht 222 Originalarbeiten · erntete Lob 48 · Ansichten 20000 +

Ich denke du magst

Origin blog.csdn.net/qq_44116998/article/details/104570587
Empfohlen
Rangfolge