繁体   English   中英

在C ++中的结构成员之间来回复制值

[英]Copy values to and from a member of a structure in C++

我有一个如下所示的结构,该结构用于在跟踪索引的同时对向量进行排序。

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)。 我的第二个问题与将结构的一个成员复制到数组有关。 我在这里找到了一篇文章 ,讨论了使用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个向量,因此很难避免循环。 (如果您已经用值填充了val_order数组,则可以从index.assign初始化向量,请参阅此链接

问题2

您想将所有n个顺序值都复制到一个int数组中,而memcpy似乎很方便。 不幸,

  • 向量的每个元素都是val_order结构,因此即使您可以通过memcpy复制,这不仅会复制int * order *值,而且还会复制double * value *值
  • 此外,您正在处理vector ,它的内部结构不是一个简单的数组( vector允许使用常规数组无法执行的操作),因此,您不能通过简单地给出向量的地址将一堆矢量复制到int数组。 ,是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;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM