2010-09-24 2 views
20

У меня есть библиотека, которая ожидает массив и заполняет его. Я бы хотел использовать std :: vector вместо использования массива. Таким образом, вместоConvert std :: vector to array

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

Я хотел бы сделать:

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

Но я не могу найти способ сделать это. Есть ли возможность использовать для этого std :: vector?

Спасибо за чтение!


EDIT: Я хочу разместить обновления этой проблемы: Я играл вокруг с C++ 11 и нашел лучший подход. Новое решение - использовать функцию std :: vector.data(), чтобы получить указатель на первый элемент. Таким образом, мы можем сделать следующее:

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

Если мы хотим использовать вектор с фиксированным количеством элементов мы лучше использовать новый тип данных зЬй :: массив вместо (кстати, по этой причине имя переменной «массив ", который использовался в вышеприведенном вопросе, больше не должен использоваться !!).

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

Оба варианта коды будет работать должным образом в Visual C++ 2010. Помните: это C++ 11 код так что вам потребуется компилятор, который поддерживает функцию!

Ответ ниже остается в силе, если вы не используете C++ 11!

+0

Возможный дубликат [Как преобразовать вектор в массив C++] (http://stackoverflow.com/questions/2923272/how-to-convert-vector-to-array-c) – Trilarion

ответ

26

Да:

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

Элементы в vector гарантированно быть непрерывными, как массив.

+0

Работы :) Спасибо! – SideEffect

+5

Но будьте осторожны с массивами нулевого размера. – ybungalobill

+0

Что делать, если вектор перемещается? – alxx