从 .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()
我正在尝试获取数组 "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()