gpt4 book ai didi

c++ - 在 C++ 中将值复制到结构成员和从成员复制值

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:27:42 26 4
gpt4 key购买 nike

我有一个如下所示的结构,我使用它来对 vector 进行排序,同时跟踪索引。

struct val_order{
int order;
double value;
};

(1)。目前我所做的是使用循环来复制值,如下所示。所以我的第一个问题是是否有更快的方法将值复制到结构的成员(而不是将整个结构复制到另一个结构)

int n=x.size();
std::vector<val_order> index(n);
for(int i=0;i<x.size();i++){ //<------So using a loop to copy values.
index[i].value=x[i];
index[i].order=i;
}

(2)。我的第二个问题与将结构的一个成员复制到数组有关。我找到了一个 post here讨论使用 memcpy来完成那个。但我无法让它工作(下面的代码)。我收到的错误消息是 class std::vector<val_order, std::allocator<val_order> > has no member named ‘order’ .但是我能够通过迭代访问 index.order 中的值。所以我想知道我的代码有什么问题。

int *buf=malloc(sizeof(index[0].order)*n);
int *output=buf;
memcpy(output, index.order, sizeof(index.order));

最佳答案

问题 1

由于您从两个不同的来源(数组 x 和变量 i)初始化 n 个 vector ,因此很难避免循环。 (如果你有一个 val_order 数组已经填充了值,你可以从 index.assign 初始化 vector ,参见 this link )

问题 2

您想将所有 n 个 order 值复制到一个 int 数组中,memcpy 似乎很方便。不幸的是,

  • vector 的每个元素都是一个 val_order 结构,因此即使您可以通过 memcpy 进行复制,它也不仅会复制 int * order* 值还有 double *value* 值
  • 此外,您正在处理 vector,它的内部结构不是一个简单的数组(vector 允许使用常规数组无法进行的操作),因此您不能将一堆 vector 复制到 int 数组,只需将第一个 vector 元素的地址提供给 memcpy
  • 此外,memcpy 无论如何都不会像您想要的那样工作,但它需要一个地址 - 因此您必须提供,例如,&index[0] .. . 但是,鉴于以上几点,这不是您想要的

所以你必须做另一个循环,比如

int *buf = (int *)malloc(sizeof(int)*n);
int *output = buf;
for (int i=0 ; i<n ; i++) {
output[i] = index[i].order;
}

关于c++ - 在 C++ 中将值复制到结构成员和从成员复制值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16635719/

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