C++11 Praktische Technologie (4) So schreiben Sie eine for-Schleife

Gemeinsame Nutzung

Die Methode zum Durchlaufen von STL-Containern in C++ ist normalerweise:

#include <iostream>
#include <vector>

int main() {
    
    
	std::vector<int> arr = {
    
    1, 2, 3};
	for (auto it = arr.begin(); it != arr.end(); ++it)
	{
    
    
		std::cout << *it << std::endl;
	}
	return 0;
}

Der obige Code muss auf den Iterator achten und außerdem den Anfang und das Ende des Containers anzeigen. Zum Schreiben nicht geeignet. C++11 unterstützt bereichsbasierte for-Schleifen. wie folgt

Bereichsbasierte C++11-for-Schleife

Eine bereichsbasierte for-Schleife in C++11 sieht folgendermaßen aus:

#include <iostream>
#include <vector>

int main() {
    
    
	std::vector<int> arr = {
    
    1, 2, 3};
	for (auto n : arr)
	{
    
    
		std::cout << n << std::endl;
	}
	return 0;
}

Sie können Referenzen auch verwenden, um den Wert eines Containers zu ändern:

#include <iostream>
#include <vector>

int main() {
    
    
	std::vector<int> arr = {
    
    1, 2, 3};
	for (auto& n : arr)
	{
    
    
		n++;
	}
	//n的值为2,3,4
	return 0;
}

Kartencontainer unterstützen außerdem:

#include <iostream>
#include <map>
#include <string>

int main() {
    
    
	std::map<std::string, int> mp = {
    
     {
    
    "1",1}, {
    
    "2", 2}, {
    
    "3", 3} };
	for (auto& n : mp)
	{
    
    
		std::cout << n.first << " -> " << n.second << std::endl;
	}
	return 0;
}

Beachten

Bereichsbasierte for-Schleifen unterstützen jedoch nicht das Ändern des Containers während der Schleife:
Beispiel:

#include <iostream>
#include <vector>

int main() {
    
    
	std::vector<int> arr = {
    
     1, 2, 3 };
	for (auto n : arr)
	{
    
    
		std::cout << n << std::endl;
		arr.push_back(4);//修改arr
	}
	return 0;
}

Laufergebnisse:
Fügen Sie hier eine Bildbeschreibung ein
Der Hauptgrund ist, dass die obige for-Schleife den Iterator zwar nicht explizit sieht, aber tatsächlich der Verwendung des Iterators zum Durchlaufen der Werte des Containers entspricht. Wenn wir das Containerobjekt während der Schleife ändern, ändert sich der Iterator wird geändert, was zu einer anschließenden Durchquerung führt und die Werte verwechselt werden.

Supongo que te gusta

Origin blog.csdn.net/weixin_44477424/article/details/132307271
Recomendado
Clasificación