2010-09-24 37 views
20

Tengo una biblioteca que espera una matriz y la rellena. Me gustaría usar un std :: vector en lugar de usar una matriz. Así que en lugar deConvertir std :: vector en matriz

int array[256]; 
object->getArray(array); 

me gustaría hacer:

std::vector<int> array; 
object->getArray(array); 

Pero no puedo encontrar una manera de hacerlo. ¿Hay alguna posibilidad de utilizar std :: vector para esto?

Gracias por leer!


EDIT: que desea colocar una actualización para este problema: Yo estaba jugando con C++ 11 y se encontró un mejor enfoque. La nueva solución es usar la función std :: vector.data() para obtener el puntero al primer elemento. por lo que podemos hacer lo siguiente:

std::vector<int> theVec; 
object->getArray(theVec.data()); //theVec.data() will pass the pointer to the first element 

Si queremos usar un vector con una cantidad fija de elementos que es mejor utilizar el nuevo tipo de datos std :: matriz en lugar (por cierto, por esta razón el nombre de la variable "matriz ", que se utilizó en la pregunta anterior, ¡ya no se debe usar!).

std::array<int, 10> arr; //an array of 10 integer elements 
arr.assign(1); //set value '1' for every element 
object->getArray(arr.data()); 

Ambas variantes código funcionará correctamente en Visual C++ 2010. Recuerde: este es C++ 11 Código por lo que necesitará un compilador que apoya las características!

¡La respuesta a continuación sigue siendo válida si no utiliza C++ 11!

+0

Posible duplicado de [Cómo convertir vector a matriz C++] (http://stackoverflow.com/questions/2923272/how-to-convert-vector-to-array-c) – Trilarion

Respuesta

26

Sí:

std::vector<int> array(256); // resize the buffer to 256 ints 
object->getArray(&array[0]); // pass address of that buffer 

Los elementos de un vector están garantizados para ser contiguos, como una matriz.

+0

Works :) ¡Gracias! – SideEffect

+5

Pero tenga cuidado con las matrices de tamaño cero. – ybungalobill

+0

¿Qué pasa si el vector se reubica? – alxx