将矢量的元素存储到另一个向量中

时间:2013-07-16 10:00:40

标签: visual-studio-2010 performance visual-c++ vector 2d-vector

我有一个16997 * 15931 * 6元素的向量。您知道这是GDAL库的RasterIO函数读取的栅格的不同波段。现在我想将元素存储到具有六个元素(行)的2d向量中,每行将包含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图像,我需要具有高性能的代码。所以任何更快的算法都会受到欢迎 感谢

2 个答案:

答案 0 :(得分:0)

首先,您应该使用最大优化进行编译并测量当前代码的性能。它还取决于您使用的处理器。

如果你真的必须改变它,我建议你定义一个6个字符的结构,并进行结构赋值。你将有一个结构矢量,然后你的循环就像

for (i = 0; i < 16997*15931; i++)
    something.pushback(data.at(i));

答案 1 :(得分:0)

在优化算法之前,您需要了解算法的速度。一些建议:

  • call something.push_back(data [i]);而不是调用.at();操作符不检查索引边界,但是在()处,因此稍快一些

  • 在循环开始之前调整向量的大小。实际上,矢量将随着它的增长而调整大小,它将通过循环重复分配,复制和释放。这可能是昂贵的操作,并且如您在开始之前知道大小,预分配可以避免开销

  • 通过避免相对昂贵的部门反复消除i%6 I侧环可能

相关问题