[英]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 *值 &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.