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)
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
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
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
ist zu beachten , dass min_element and max_element
die 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
Aufmerksamkeit vector
und tat es nicht find
Funktion 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
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 ,
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 equa
kö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
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 )