【问题标题】:Get array from .begin() and .end() iterators从 .begin() 和 .end() 迭代器获取数组
【发布时间】:2016-11-26 00:29:52
【问题描述】:

我正在尝试将数组“放入”std::vector

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

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

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

【问题讨论】:

  • 你的意思是vector.data()
  • 问题是,我的上下文中没有向量对象。我只得到vector.begin() 和vector.end() 的结果。

标签: c++ arrays iterator openacc


【解决方案1】:

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

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

或更容易使用

&a.first()

要从.begin().end() 获取大小,请使用

a.end() - a.begin()

【讨论】:

  • 我对你的回答投了反对票。您可以编辑您的答案以便我投票吗?
【解决方案2】:

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

如果你只需要它的一部分:

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

【讨论】:

    【解决方案3】:
    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
    

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

    【讨论】:

    • 这如何回答这个问题? OP 正在寻求一种从两个迭代器中检索基础数据的方法,而您只是在展示如何使用迭代器循环遍历容器。
    • 这会将向量中的数据复制到数组中,这也可以,但我需要就地工作,所以这不是我的选择。不过,您的答案可能对其他人有用。
    • @ChristopherGuckes 我现在意识到你想要什么,这是目前公认的答案。无论如何,谢谢你的问题。
    猜你喜欢
    • 2020-10-14
    • 2014-01-24
    • 2014-10-03
    • 2015-04-29
    • 2020-07-12
    • 1970-01-01
    相关资源
    最近更新 更多