Конвертировать std :: vector в массив - PullRequest
21 голосов
/ 24 сентября 2010

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

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 (кстати, по этой причине имя переменной «массив», которое использовалось в приведенном выше вопросе, не должно быть используется больше !!).

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!

1 Ответ

26 голосов
/ 24 сентября 2010

Да:

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

Элементы в vector гарантированно будут смежными, как массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...