C++ <array> begin / end-Funktion
beginundendEs ist die wichtigste Iteratorfunktion in array, sie wird verwendet, umdie begin- und end-Iteratoren des Containers zu erhalten.。
beginundendsind Memberfunktionen der Container-Klasse:
begingibt einen Iterator auf das erste Element des Containers zurückIteratorendGibt einen Iterator auf die Position nach dem letzten Element des Containers zurück.Iterator(Sentinel-Iterator)
Diese beiden Funktionen sind die Grundlage der Algorithmen der C++-Standardbibliothek und der bereichsbasierten for-Schleifen.
Wortdefinitionen: beginBezeichnet "begin",endBezeichnet "end".
Grundlegende Syntax und Parameter
beginundendSie sind Memberfunktionen der Container-Klasse, und ihr Aufruf erfordert keine Argumente.
Syntaxformat
iterator begin() noexcept; const_iterator begin() const noexcept; iterator end() noexcept; const_iterator end() const noexcept;
Parameterbeschreibung
- Parameter: Keine Parameter
- Diese Funktionen akzeptieren keine Parameter.
Funktionsbeschreibung
- Rückgabewert:
begin()Gibt einen Iterator auf das erste Element zurück.end()Gibt einen Iterator (Sentinel) auf die Position nach dem letzten Element zurück.
- Effekt: Der zurückgegebene Iterator kann verwendet werden, um den Container zu durchlaufen oder mit Algorithmen zu arbeiten.
- Hinweis:
end()Der zurückgegebene Iterator zeigt auf eine "virtuelle" Position, kann nicht dereferenziert werden und kann nur zum Vergleich verwendet werden.
Beispiel
Lassen Sie uns anhand einer Reihe von Beispielen gründlich meisternbeginundendVerwendung.
Beispiel 1: Grundlegende Verwendung - Durchlaufen von Containern
Beispiel
#include <array>
int main() {
std::array<int, 5> numbers = {10, 20, 30, 40, 50};
// Mit einem Iterator durchlaufen
std::cout << "Mit einem Iterator durchlaufen: ";
for(auto it = numbers.begin(); it != numbers.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
使用迭代器遍历: 10 20 30 40 50
Codeanalyse:
numbers.begin()Gibt einen Iterator zurück, der auf das erste Element (10) zeigt.numbers.end()Gibt einen Iterator auf die Position nach dem letzten Element zurück.- Schleifenbedingung
it != numbers.end()Stellt das Durchlaufen aller Elemente sicher.
Beispiel 2: Bereichsbasierte for-Schleife
Die in C++11 eingeführte bereichsbasierte for-Schleife verwendet internbeginundend。
Beispiel
#include <array>
#include <string>
int main() {
std::array<std::string, 3> names = {"Alice", "Bob", "Charlie"};
// Bereichsbasierte for-Schleife (verwendet intern begin/end)
std::cout << "Bereichsbasierte for-Schleife verwenden: ";
for(const auto& name : names) {
std::cout << name << " ";
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
使用范围 for 循环: Alice Bob Charlie
Codeanalyse:
- Die bereichsbasierte for-Schleife ist eine prägnante Möglichkeit, Iteratoren zu verwenden.
- Der Compiler ruft automatisch auf
begin()undend()。
Beispiel 3: Verwendung von STL-Algorithmen
Algorithmen der Standardbibliothek müssen Iteratoren verwenden, um Bereiche anzugeben.
Beispiel
#include <array>
#include <algorithm>
int main() {
std::array<int, 6> numbers = {5, 2, 8, 1, 9, 3};
// Sortieren
std::sort(numbers.begin(), numbers.end());
std::cout << "Nach dem Sortieren: ";
for(int n : numbers) {
std::cout << n << " ";
}
std::cout << std::endl;
// Element finden
auto it = std::find(numbers.begin(), numbers.end(), 8);
if(it != numbers.end()) {
std::cout << "Gefundenes Element: " << *it << std::endl;
}
return 0;
}
Erwartete Ausgabe:
排序后: 1 2 3 5 8 9 找到元素: 8
Codeanalyse:
std::sort(begin, end)Verwenden Sie Iteratoren, um den Sortierbereich anzugeben.std::find(begin, end, value)Verwenden Sie Iteratoren, um den Suchbereich anzugeben.
Beispiel 4: Reverse-Iteratoren
NutzungrbeginundrendKann den Container in umgekehrter Reihenfolge durchlaufen.
Beispiel
#include <array>
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
// Vorwärtsdurchlauf
std::cout << "Vorwärts: ";
for(auto it = numbers.begin(); it != numbers.end(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
// Rückwärtsdurchlauf (mit rbegin/rend)
std::cout << "Rückwärts: ";
for(auto it = numbers.rbegin(); it != numbers.rend(); ++it) {
std::cout << *it << " ";
}
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
正向: 1 2 3 4 5 反向: 5 4 3 2 1
Codeanalyse:
rbegin()Gibt einen Reverse-Iterator zurück, der auf das letzte Element zeigt.rend()Gibt einen Reverse-Iterator zurück, der auf die Position vor dem ersten Element zeigt.
Beispiel 5: Iterator-Arithmetik
Iteratoren unterstützen arithmetische Operationen, wodurch schnelle Sprünge an eine angegebene Position möglich sind.
Beispiel
#include <array>
int main() {
std::array<int, 7> numbers = {10, 20, 30, 40, 50, 60, 70};
// Drittes Element abrufen (Index 2)
auto it = numbers.begin() + 2;
std::cout << "begin() + 2 = " << *it << std::endl;
// Berechne den Abstand zwischen zwei Iteratoren
auto first = numbers.begin();
auto last = numbers.end();
auto distance = last - first;
std::cout << "Containergröße (Abstand): " << distance << std::endl;
// Mittleres Element abrufen
auto mid = numbers.begin() + (numbers.size() / 2);
std::cout << "Mittleres Element: " << *mid << std::endl;
return 0;
}
Erwartete Ausgabe:
begin() + 2 = 30 容器大小(距离): 7 中间元素: 40
Codeanalyse:
- Iterator-Unterstützung
+、-Arithmetische Operationen usw. - Sie können
end() - begin()Containergröße berechnen.
Beispiel 6: Verwenden von Iteratoren zum Ändern von Elementen
Der Iterator gibt eine Referenz zurück, die zum Ändern von Elementen verwendet werden kann.
Beispiel
#include <array>
int main() {
std::array<int, 5> numbers = {1, 2, 3, 4, 5};
std::cout << "Vor der Änderung: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
// Alle Elemente mithilfe von Iteratoren mit 2 multiplizieren
for(auto it = numbers.begin(); it != numbers.end(); ++it) {
*it *= 2;
}
std::cout << "Nach der Änderung: ";
for(int n : numbers) std::cout << n << " ";
std::cout << std::endl;
return 0;
}
Erwartete Ausgabe:
修改前: 1 2 3 4 5 修改后: 2 4 6 8 10
Codeanalyse:
- Iterator-Dereferenzierung (
*it) gibt eine Referenz auf das Element zurück. - Sie können diese Referenz direkt ändern, um den Wert des Elements zu ändern.
Weitere Erweiterungen