gpt4 book ai didi

c++ - 返回指针而不是 vector::iterator 并将 vector::iterator 转换为指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:58:46 25 4
gpt4 key购买 nike

我有一个函数,它的返回类型是下面的“vector::iterator”:

vector<unsigned int>::iterator foo(unsigned int arg, vector<unsigned int> arr, vector<unsigned int> M)
{ if (arg == 0)
return arr.begin();
else if (arg == 2)
return arr.begin() + arr[arg - 1];
else
return arr.begin();
}

问题是,如何将其返回值转换为指针而不是 std::vector 迭代器?

我应该将它转换为在 CUDA 中用于内核,因为我们不能在 CUDA 中使用 vector 或其迭代器

这是我的方式:

__host__ __device__ unsigned int* foo(unsigned int arg, unsigned int* arr, unsigned int* M)
{
unsigned int* res, tmp;
if (arg == 0)
tmp = arr[0];
else if (arg == 2)
tmp = arr[0] + arr[arg - 1];
else
tmp = arr[0];
res = &tmp;
return res;
}

在内核中工作,例如:

__global__ kernel void kernel . . .
.
.
unsigned int* d_h = foo( , ,)
.
.

但是它是错误的并且不起作用,我该怎么做呢?谢谢,

最佳答案

你可以做到 &(*it)它将提供一个指向迭代器引用的元素的指针。使用 std::addressof(*it)std::vector<T> 上的通用代码中如果你不知道 operator&已被恶意用户重载。

关于c++ - 返回指针而不是 vector::iterator 并将 vector::iterator 转换为指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34838490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com