rango de

1, para una gama de nuevas características en C ++ 11, la sintaxis es la siguiente:

for(declaration:expression)
	statement;
  • Ámbito de aplicación para la gama de iteración se determina en el proceso de utilización sin índice preocupante situación fuera de límites.
  • Puede atravesar una definidaempezar() y final()Método, y el procedimiento vuelve iterador devuelve el objeto de clase. A medida que el STL vector, conjunto, lista, mapa, cola, cola de doble extremo, cuerdas y otros objetos.
  • Puntero no se puede utilizarLa matriz resultante usando la nueva gama no será utilizado para)
  • Puesto que el recorrido de la matriz se convierte en un puntero, por lo que cuando se atraviesa una matriz multi-dimensional, excepto por el bucle más interior, todas las demás variables tienen que utilizar una referencia del bucle de control en su totalidad.

matriz 2, unidimensional de aplicaciones

int arr1[] = { 10,20,3,4,5,6,8,9 };
// 此时可以正常遍历
for (auto &i : arr1)
	cout << i << " ";
cout << endl;


int *arr2 = new int[10];
// 错误:因为arr2的类型是 int* ,试图在 int* 内遍历是不合法的。
for (auto &j : arr2)
{
	cout << j << " ";
}

3, la aplicación en matriz multidimensional

int arr[2][3] = { {1,2,3},{4,5,6} };

// 正确:其中最内层的循环控制变量 col 可以不用引用类型。
for (auto &row : arr)
	for (auto &col : row)
		cout << col << " ";

El ciclo anterior de control de bucle externo variable de fila declarado como un tipo de referencia, a fin de evitar la matriz se convierte automáticamente en un puntero. Si se utiliza un tipo de referencia, entonces el bucle se convierte en la siguiente:

// 错误:此时外层循环控制变量不是引用类型
for (auto row : arr)
	for (auto col : row)
		cout << col << " ";

Este programa no compilará. Debido a que el primer bucle a través de todos los elementos de arr estos elementos es en realidad una matriz de tamaño 3. La fila en lugar de una variable de tipo de referencia, las variables de inicialización fila compilador, estos se convierten automáticamente en una matriz de elementos dentro de la matriz a punto al primer elemento del puntero. tipo de fila así obtenido es int *, entonces el bucle interior no es ilegal.

4, utilizado en cadena, el vector y otros recipientes

string str("this is just a test !");
for (auto i : str)
{
	cout << i << " ";
}
Publicados 213 artículos originales · ganado elogios 48 · vistas 110 000 +

Supongo que te gusta

Origin blog.csdn.net/Jeffxu_lib/article/details/104767689
Recomendado
Clasificación