从 .begin() 和 .end() 迭代器获取数组

Get array from .begin() and .end() iterators

我正在尝试获取数组 "inside" 和 std::vector

我不太了解 C++,所以基本上我正在寻找一个片段来获取数组(这是指向第一个元素 iirc 的指针)和大小。我需要这个,因为我想通过 OpenACC 将数组的内容传输到加速器设备。

我从我应该操作的函数中得到的只是两个用于数据开头和结尾的 RA 迭代器

我知道并非所有这些都必须是连续的,但我将生成的代码将是纯粹的学术性的,所以现在这应该不是问题。

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

这就是您使用迭代器的方式;确保使用循环,因为您有开始条件和结束条件。

如果你想要整个向量,vector.data() 是你的朋友。

如果您只需要其中的一部分:

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

A std::vector 保证在内存中是连续的,所以这应该不是问题。您可以使用

获取第一个元素的地址(读取:指针)
&*a.begin()

或使用

更容易
&a.first()

要从 .begin().end() 获取尺寸,请使用

a.end() - a.begin()