Pregunta

Estoy pasando mi vector a una función que espera una matriz c. Devuelve la cantidad de datos que llenó (similar a fread). ¿Hay alguna manera en que pueda decirle a mi vector que cambie su tamaño para incluir la cantidad que la función ha pasado?

por supuesto, me aseguro de que el vector tenga la capacidad () para mantener esa cantidad de datos.

¿Fue útil?

Solución

No, no hay una forma compatible de " expandir " un vector, por lo que contiene valores adicionales que se han copiado directamente. Basándose en la " capacidad " asignar memoria sin tamaño en la que puede escribir definitivamente no es algo en lo que deba confiar.

Debes asegurarte de que tu vector tenga la cantidad necesaria de espacio al cambiar el tamaño antes de llamar a la función y luego cambiar el tamaño al valor correcto. Por ejemplo,

vector.resize(MAX_SIZE);
size_t items = write_array(&(vec[0]), MAX_SIZE)
vector.resize(items);

Otros consejos

capacity te dice solo cuánta memoria está reservada, pero no es el tamaño del vector.

Lo primero que debes hacer es cambiar el tamaño al tamaño máximo requerido:

vec.resize(maxSizePossible);
size_t len = cfunc(&(vec[0]));
vec.resize(len);

hmm ..
vector.resize (tamaño);
?

std :: vector tiene un método resize () con el nuevo tamaño como parámetro. Así que simplemente llamarlo con el número devuelto por su función debería estar bien.

std :: back_inserter puede ser lo que necesita. Suponiendo que su función de entrada sea capaz de trabajar con un iterador, páselo std :: back_inserter (myvector) . Eso push_back todo lo escrito en el iterador, y redimensionará implícitamente el vector según sea necesario.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top