Получить массив из .begin () и .end () итераторов

Я пытаюсь получить массив «внутри» std::vector,

Я не очень хорошо знаю C ++, поэтому в основном я ищу фрагмент, чтобы получить массив (который является указателем на первый элемент, iirc) и размер. Мне это нужно, потому что я хочу передать содержимое массива на устройство ускорения через OpenACC.

Все, что я получаю от функции, которой я должен манипулировать, это два RA-итератора для начала и конца данных.

Я знаю, что не все они должны быть смежными, но код, который я создам, будет чисто академическим, так что пока это не должно быть проблемой.

1

Решение

std::vector гарантированно будет непрерывным в памяти, так что это не должно быть проблемой. Вы можете получить адрес (читай: указатель на) первого элемента с помощью

&*a.begin()

или проще с

&a.first()

Чтобы получить размер от .begin() а также .end()использовать

a.end() - a.begin()
4

Другие решения

Если вы хотите весь вектор, vector.data() твой друг.

Если вам нужна только часть этого:

std::vector<X>::iterator it1 = ... , it2 = ...;
X* item = &(*it1);
int elements = it2 - it1;
2

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

Вот как вы используете итераторы; Обязательно используйте цикл, потому что у вас есть начальное условие и конечное условие.

1
По вопросам рекламы [email protected]