Pensando en la aritmática del iterador en C ++ Primer

Acerca de iter1-iter2

La tabla 3.7 en C ++ Primer (versión en inglés, página 111) tiene:

Al restar dos iteradores se obtiene el número que, cuando se agrega al iterador de la derecha, se obtiene el iterador de la izquierda. Los iteradores deben denotar elementos en, o uno más allá del final del mismo contenedor.

Puede resultar difícil entender esta oración. Pero primero, la salida es un número. Y este número es la diferencia de ubicación (distancia de ubicación (firmada)) (tan fácil de recordar) (por supuesto que está firmado), en lugar de generar el valor almacenado en el vector en esa ubicación como iter-n. Al hacer el ejercicio 3.24 (b), el concepto se confundió. Lo siguiente es una prueba a través de una prueba, como se muestra en la siguiente figura:
interfaz del programa de prueba

Acerca de - ivec.end ()

El libro dice en la nota de la página 107 que no se puede incrementar ni desreferenciar. Nota: No lo dé por sentado, está bien no aumentarlo sino restarlo .
Se puede ejecutar el siguiente programa (ejercicio 3.24 (b)).

#include <iostream>
#include <vector>
using namespace std;

int main()
{
    
    
	vector<int> ivec;
	int i;
	while (cin >> i)
		ivec.push_back(i);
	for (auto it = ivec.begin(), IT=--ivec.end(); it != ivec.begin() + ivec.size() / 2; ++it, --IT)
		cout << *it + *IT << " ";
	if (ivec.size() % 2 == 0) cout << endl;
	else cout << *(ivec.begin() + ivec.size() / 2 )<< endl;
	return 0;
}

De manera similar, en la nota P119, dice " No podemos eliminar la referencia o incrementar un puntero fuera del extremo ". Es decir, cuando el puntero apunta al final (/ * * /), no se puede acceder a él indirectamente o ++.

El siguiente es el procedimiento de prueba:

#include <iostream>
#include <iterator>
using namespace std;

int main()
{
    
    
	int a[] = {
    
     0,1,2,3,4 };
	int* p = end(a);
	cout << *p << endl;
	--p;
	cout << *p << endl;
	return 0;
}

Resultado:

-858993460
4


Ver también

Página de navegación de Teddy van Jerry

Supongo que te gusta

Origin blog.csdn.net/weixin_50012998/article/details/108123835
Recomendado
Clasificación