Pregunta de inicialización de Deque simple

He usado el siguiente código para insertar algunos datos en una deque.

int data[] = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};   
deque<int> rawData (data, data + sizeof(data) / sizeof(int));

Pero no entiendo esta parte del código,

data + sizeof(data) / sizeof(int)

Qué significa eso?

preguntado el 10 de mayo de 11 a las 13:05

No hay nada subjetivo en esto, pero si lo contesto aquí, no tendré que responder cuando se migre a Stack Overflow. -

Esta pregunta es buena pero definitivamente pertenece a StackOverflow. -

Pensé que para la programación relacionada con la pregunta, aquí es donde debería ir primero. ¿Por qué esta pregunta pertenece a StackOverflow? -

StackOverflow trata sobre el código en sí, y programmers.stackexchange.com trata sobre la profesión. -

2 Respuestas

Tomemos eso poco a poco.

data es el iterador que muestra por dónde empezar. Es una matriz, pero en C y C ++, las matrices se convierten en punteros en cualquier provocación, por lo que se usa como puntero. Empiece a recibir datos de data encendido y continúe hasta el final del iterador.

El iterador final es una cierta cantidad más allá del iterador de inicio, por lo que se puede expresar como data + <something>, Donde <something> es la longitud. El iterador de inicio es un int [] que se trata como un int *, por lo que queremos encontrar la longitud en ints. (En C y C ++, los punteros aumentan según la longitud del tipo apuntado).

Por lo tanto, sizeof(data) / sizeof(int) debe ser la longitud de la matriz. sizeof(data) es el tamaño total de la matriz en bytes. (Esta es una de las diferencias entre matrices y punteros: las matrices tienen un tamaño definido, mientras que los punteros apuntan a lo que podría ser el comienzo de una matriz de tamaño desconocido). sizeof(int) es el tamaño total de un int en bytes, por lo que el cociente es el tamaño total de array in ints.

Queremos el tamaño de array in ints porque array decae en un int *, y entonces data + x apunta a la ubicación de la memoria x ints pasado data. Desde un principio y un tamaño total, encontramos el final de data, por lo que copiamos todo en data Desde el principio hasta el final.

contestado el 10 de mayo de 11 a las 17:05

@David Thornley ¡GUAU, SU RESPUESTA ES SIMPLEMENTE ABRIENDO LOS OJOS! ¡DIOS MIO! ¡Qué debería decir! ¡PERFECTO! ¡GRACIAS! - iamcreasy

@iamcreasy: Lo que digas, dilo más tranquilo. - Carreras de ligereza en órbita

Ese es un puntero al elemento imaginario más allá del último elemento de la matriz. El sizeof(data)/sizeof(data[0]) produce el número de elementos en data formación. deque el constructor acepta "iterador para el primer elemento" e "iterador más allá del último elemento" (eso es lo que end() rendimientos del iterador). Esta construcción calcula efectivamente lo mismo que .end() el iterador cedería.

contestado el 10 de mayo de 11 a las 17:05

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