gpt4 book ai didi

c++ - 参与 std::vector C++

转载 作者:搜寻专家 更新时间:2023-10-31 01:32:02 24 4
gpt4 key购买 nike

在我的代码中我有这样的东西:

struct SomeStruct
{
int test1;
int test2;
float test3;
float test4;
};
std::vector<SomeStruct> SomeStructs;

我正在寻找一种方法来以连续的方式获取该 vector 的一部分,以便我可以使用指针或 C 数组访问它。

假设我想要一个指针来访问结构中的 test2 部分。我想将 vector 的那部分传递给 C API,这可能吗?

我试图避免创建新的 std::vector/c-array。

它在内存中的样子(有点):

enter image description here

最佳答案

不,你要求的是不可能的。快速回顾:

  1. 我们可以清楚地看到该结构的 test2 条目当前在内存中并未连续布局,因为它们只是连续结构的一个成员,因此很明显其他结构元素位于每次出现的 test2 之间。
  2. 您希望它们是连续的,因此您需要与当前不同的内存布局。
  3. 您不想创建新的 vector 或数组,所以您被困在当前的内存布局中,这是错误的。

你的选择是这样的:

  1. 将变量更改为 4 个变量 vector ,而不是一个结构 vector 。
  2. 在需要时创建一个新 vector 。
  3. 不要使用需要连续内存的 C API。

对于 3,值得注意的是一些 C API,特别是 BLAS,支持“跨步”数组,这意味着元素之间有固定大小的间隙,这将为您解决这个问题。

关于c++ - 参与 std::vector C++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44231741/

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