Я пытаюсь получить массив «внутри» std::vector
,
Я не очень хорошо знаю C ++, поэтому в основном я ищу фрагмент, чтобы получить массив (который является указателем на первый элемент, iirc) и размер. Мне это нужно, потому что я хочу передать содержимое массива на устройство ускорения через OpenACC.
Все, что я получаю от функции, которой я должен манипулировать, это два RA-итератора для начала и конца данных.
Я знаю, что не все они должны быть смежными, но код, который я создам, будет чисто академическим, так что пока это не должно быть проблемой.
std::vector
гарантированно будет непрерывным в памяти, так что это не должно быть проблемой. Вы можете получить адрес (читай: указатель на) первого элемента с помощью
&*a.begin()
или проще с
&a.first()
Чтобы получить размер от .begin()
а также .end()
использовать
a.end() - a.begin()
Если вы хотите весь вектор, vector.data()
твой друг.
Если вам нужна только часть этого:
std::vector<X>::iterator it1 = ... , it2 = ...;
X* item = &(*it1);
int elements = it2 - it1;
myArray[myvector.end() - myvector.begin()]
for (std::vector<int>::iterator it = myvector.begin(), int i = 0; it!=myvector.end(); ++it, ++i)
myArray[i] = myvector[i]// or whatever you want
Вот как вы используете итераторы; Обязательно используйте цикл, потому что у вас есть начальное условие и конечное условие.