Sintaxis de corchete de vector vs iterador

¿Por qué el siguiente bloque de código imprime "40" repetidamente,

vector<Square> array(81);

char c;
int d;

int i = 0;

for(c='A'; c<'J'; c=c+1)
  for(d=1; d<10; d++)
    array.push_back( Square(c, d));

for(int i = 0; i<81; i++)
  cout << array[i].column << array[i].row << endl;
  }

Mientras que esto imprime, A1, A2, A3, .... , I9

vector<Square> array(81);

char c;
int d;

int i = 0;

for(c='A'; c<'J'; c=c+1)
  for(d=1; d<10; d++)
    array[i++] = ( Square(c, d));

for(i = 0; i<81; i++)
  cout << array[i].column << array[i].row << endl;
} 

¿Retroceder lo coloca en una memoria aleatoria a la que se debe acceder a través del iterador? ¿Es mejor usar siempre iteradores al mirar a través de un vector?

preguntado el 02 de julio de 12 a las 09:07

Nadie más ha mencionado que lo que puede haber estado tratando de lograr con array(81); se puede hacer con reserve(81);. es.cppreference.com/w/cpp/container/vector/reserve -

2 Respuestas

vector<Square> array(81); declara un vector con 81 elementos. Cuando usted push_back, inserta nuevos elementos, es decir, el tamaño utilizado aumentará a 82, 83,... y sus elementos existentes permanecerán sin cambios.

Entonces, en su primer fragmento, imprime los elementos que están en el vector antes de cualquiera de los push_backs. El segundo fragmento reemplaza los elementos con los que desea.

Respondido 02 Jul 12, 09:07

Cada vez que usa el push_back, Un nuevo El elemento se crea anexado al final del vector.

Si desea que su primer ejemplo de código funcione correctamente, debe evitar establecer el tamaño del vector y declararlo como vector<square> array;

Respondido 02 Jul 12, 09:07

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.