He estado recibiendo mi cabeza redonda C++ durante unos meses, y ha sido dirigido por google para desbordar la mayor parte del tiempo para consultas C++. Anoté con frecuencia exhortaciones del tipo "¿por qué no usas un vector?", Y me inspiré para hacer exactamente eso.vectores C++ no como matrices
Por lo tanto, principalmente para obtener los beneficios menores de la desasignación de memoria automática, y poder escribir funciones de comparación tipeadas para la clasificación. Cambié una serie de punteros a objetos para que fueran un vector. Ahora pensé (incorrectamente parece) que vectores podrían utilizarse más o menos como matrices, y por lo tanto me inicializado así:
cluster clusters[LOTS];
vector<cluster *> pclust;
pclust.reserve(numClust);
for (int i=0; i<numClust; ++i)
pclust[i] = clusters + i;
No hay quejas de que el compilador. Luego, algún tiempo después, debo ordenar el vector en algún atributo del objeto del clúster. Entonces:
std::sort(pclust.begin(), pclust.end(), ClusterCompareNumSegs);
De nuevo no hay problemas para compilar. Excepto que el vector no se ordena . Resulta que vector.size() es cero, y por supuesto mi inicialización debería haber sido
pclust.push_back(clusters + i);
Ahora que es fácil de solucionar, pero estoy confundida, porque el asignación incorrecta inicial estaba funcionando. Me iterado con éxito a través el vector - utilizando la sintaxis de matrices, así:
for (clustind=0; clustind < numClust; ++clustind) {<br>
cluster *cl = pclust[clustind];
...happily access *cl...
Y todo funcionó bien. Entonces me pregunto qué está pasando. Presumiblemente en mis asignaciones iniciales, estaba tratando de acceder a los elementos que aún no están en el vector (estaba tratando de ponerlos), y el vector arrojaba excepciones que estaba ignorando. Pero, no obstante, al hacer referencia a las ubicaciones, los punteros estaban allí. ¿Alguien puede proporcionar la iluminación?
La biblioteca estándar es muy amplia, y no especialmente acogedor para el principiante, le sugiero que lea la documentación sobre al menos los tipos de contenedores (http://en.cppreference.com/w/cpp) - se te salvará mucho dolor – cmannett85
Solo para reiterar, mi código está todo arreglado ahora, pero me preguntaba – bandjalong
... Si alguien puede explicar mientras el operador [] funcionó tan bien como lo hizo, incluso sin cambiar el tamaño. ¿Suerte con la implementación del compilador (gcc) de vectores quizás? – bandjalong