[英]C++ : efficient copy of a list of vectors in a vector
我正在寻找在向量中复制向量列表内容的最有效方法。 我想尽可能避免重新分配内存。
我的问题如下:我有:
包含N个元素的std::vector<int> v
向量std::vector< std::vector<int>* > vlist
而且我知道vlist向量中元素M的总数为<= N(N和M可以非常大)
我想复制v中的vlist的所有元素(首先复制vlist [0]的所有元素,然后复制vlist [1]的所有元素,等等...),最后将v的大小减小到M(我的项目don (不使用C ++ 2011)。
如何尽可能有效地做到这一点?
非常感谢你。
编辑:备注:v已被N个元素填充,我想用来自其他向量的M个(<= N)元素替换它们。
我不知道这是否是最有效的方法 ,但这是一种方法 :
std::vector<int> v;
std::vector< std::vector<int>* > vlist;
int j = 0;
for(int i = 0; i < vlist.size(); ++i) {
std::copy(vlist[i]->begin(), vlist[i]->end(), &v[j]);
j += vlist[i]->size();
}
v.resize(j);
如果您确实想要最有效的方法,则可能必须实现几种不同的方法并比较它们的速度。
最有效的方法是不复制它。 您的应用程序需要做什么? 另外,为什么要有vector<* vector<int> >
而不是vector<vector<int> >
? 围绕它进行设计,使用pimpl,惰性复制等。
最后,我不确定您认为您能做些什么,这会击败std的默认副本构造函数。 您是否已对应用程序进行了概要分析,以确定默认的ctor是瓶颈?
std::vector<int> v;
v.reserve(N);
for(size_t i = 0; i<vlist.size(); i++)
{
v.insert(v.end(), vlist[i]->begin(), vlist[i]->end());
}
如果M接近N,这应该足够有效。否则,最好在分配内存之前计算M,然后使用v.reserve(M)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.