Подтвердить что ты не робот

Преобразование std::vector в массив

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

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

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

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

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

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


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

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

Если мы хотим использовать вектор с фиксированным количеством элементов, мы лучше используем новый тип данных std:: array (btw, по этой причине имя массива "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 С++ 2010. Помните: это код С++ 11, поэтому вам понадобится компилятор, который поддерживает функции!

Ниже приведен ответ, если вы не используете С++ 11!

4b9b3361

Ответ 1

Да:

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

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