我有一个如下所示的结构,我用它来分类矢量,同时跟踪索引。
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));
答案 0 :(得分:1)
问题1
由于您是从两个不同的源(数组 x 和变量 i )初始化n个向量,因此很难避免循环。 (如果您的index.assign
数组已经填充了值,则可以从val_order
初始化向量,请参阅this link)
问题2
您希望将所有n 订单值复制到 int 数组中, memcpy 似乎很方便。不幸的是,
val_order
结构,所以即使您可以通过 memcpy 进行复制,这不仅会复制 int * order *值还有 double * value * 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;
}