将向量的元素存储到另一个向量中
Posted
技术标签:
【中文标题】将向量的元素存储到另一个向量中【英文标题】:store elements of a vector into another vector 【发布时间】:2013-07-16 10:00:39 【问题描述】:我有一个包含 16997*15931*6 个元素的向量。您知道这是 GDAL 库的 RasterIO 函数已读取的栅格的不同波段。现在我想将元素存储到具有六个元素(行)的二维向量中,每行将包含 16997*15931 个元素。我知道我可以有一个循环迭代 16997*15931*6 并评估 i%6:
vector<vector<unsigned char> > bands(6,vector<unsigned char>)
for(i=0;i<(6*16997*15931);i++)
bands[i%6].pushback(data.at(i));
但由于我使用的是高分辨率 .tiff 图像,因此我需要具有高性能的代码。所以任何更快的算法都会受到欢迎。 谢谢
【问题讨论】:
【参考方案1】:首先,您应该以最大程度的优化进行编译并测量当前代码的性能。它还可能取决于您使用的处理器。
如果真的要改的话,我建议你定义一个6字符的struct,然后做struct赋值。你将有一个结构向量,然后你的循环可以像
for (i = 0; i < 16997*15931; i++)
something.pushback(data.at(i));
【讨论】:
【参考方案2】:在优化算法之前,您需要了解算法慢的地方。一些建议:
调用 something.push_back(data[i]);而不是调用 .at();运算符不检查索引边界,而是 at(),因此速度稍快
在循环开始之前调整向量的大小。实际上,向量将随着它的增长而调整大小,这将通过循环重复分配、复制、释放。这些可能是昂贵的操作,而且您在开始之前就知道大小,预分配可以避免开销
消除循环中的 i%6 I 可能有助于避免一次又一次相对昂贵的除法
【讨论】:
以上是关于将向量的元素存储到另一个向量中的主要内容,如果未能解决你的问题,请参考以下文章