【问题标题】:reserve() memory multi-dimensional std::vector (C++)reserve() 内存多维 std::vector (C++)
【发布时间】:2012-01-29 19:32:04
【问题描述】:

让我们拥有

std::vector <std::vector <unsigned short int>> face;
face.resize(nElm);

第一个维度可以resize()。不过,我也想reserve()内存换脸的元素;我的意思是第二个维度。 (我知道resize()reserve() 之间的区别)

【问题讨论】:

  • resize()reserve() 不是一回事。你问的是哪两个?问题的措辞有点模棱两可。
  • 请接受您之前问题的一些答案。有很多不错的选择。

标签: c++ memory-management multidimensional-array stdvector


【解决方案1】:

就做吧

face.resize(nElm);
for(auto &i : face) i.resize(nDim2);

或者如果你不使用 c++11:

face.resize(nElm);
for(std::vector < std::vector < unsigned short int> >::iterator it
                =face.begin();it!=face.end();++it) {
   it->resize(dim2);
}

如果您只想将reserve 用于第二个维度,那么只需这样做而不是resize

【讨论】:

    【解决方案2】:

    如果你想调整大小,那么你需要

    for(auto i=face.begin(),ie=face.end();i!=ie;++i) i->resize(nElm);
    

    (由于两个右尖括号之间没有空格,我假设您使用的是c++11)。

    另一方面,如果您想保留内存,则必须在实际有一个向量(即第一个维度上的元素)时这样做。

    【讨论】:

    • 有了face.resize(nElm);,我实际上有一个向量,是吗?正如其他答案中提到的那样,我似乎应该为每个第一个维度一个一个地保留。
    • 是的,这正是上面的循环所做的。
    • (只是比接受答案中的效率高一点:))
    【解决方案3】:

    您必须遍历第一个维度并调整第二个维度的大小,可以使用迭代器或简单的;

    for (int i=0; i<nElm; i++) {
        face[i].resize(nElm2ndDimension);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-09-22
      • 2013-06-18
      • 2012-03-05
      • 2010-12-17
      • 1970-01-01
      • 2015-01-04
      • 2011-09-21
      相关资源
      最近更新 更多