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

时间:2016-07-22 07:35:24

标签: c++ arrays iterator openacc

我试图获得阵列"内部" if(isset($_GET['idstudent'], $_GET['idbook'])){ $_SESSION['link']=$_GET['idstudent']; $_SESSION['link2']=$_GET['idbook']; $sessionidstudent = $_SESSION['link']; $sessionidbook = $_SESSION['link2']; } $query = " SELECT * FROM viewlibrary WHERE id = :sessionidstudent AND serialno = :sessionidbook "; $query_params = array( ':sessionidstudent' => $_SESSION['link'], ':sessionidbook' => $_SESSION['link2'] ); try { $stmt = $db->prepare($query); $result = $stmt->execute($query_params); } catch(PDOException $ex) { die("Failed to run query: " . $ex->getMessage()); } $r=$stmt->fetch(PDO::FETCH_ASSOC); ?>

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

我从我应该操作的函数中获得的是两个RA-Iterator,用于数据的开头和结尾

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

3 个答案:

答案 0 :(得分:4)

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

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

或更容易使用

&a.first()

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

a.end() - a.begin()

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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