创建二维std :: vector

时间:2017-01-20 01:01:14

标签: c++ multidimensional-array vector stdvector

我想创建一个二维向量,其中第一个维度是不变的,第二个维度是不同的,例如

int const mysize = 3;
int vecSizes[3] = {7, 2, 10};
vector<vector<int>> out_buff(mysize);

我希望我的内部向量符合vecSizes中的大小,如下所示

out_buff[0] // has size 7
out_buff[1] // has size 2
out_buff[2] // has size 10

我不想使用push_backresize因为使用大型向量需要时间,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:0)

必须构建std::vector中的元素,因此为了创建所需大小的向量,您必须使用push_backresize(最好{{1}因为它只会执行1次分配)

一种替代方法可能是实际改变大小,而只是调用resize,它只是分配内存但实际上并没有插入任何元素。报告的大小仍为零,但reserve将至少返回传递给capacity的内容。

答案 1 :(得分:0)

这是一个完整的程序,对OP的代码进行了少量修改。注意大小和容量的断言(即验证)。

#include <vector>
#include <cassert>
using namespace std;

int main() {
  enum {N = 3};
  int const vecSizes[N] = {7, 2, 10};
  vector<vector<int>> out_buff{N};

  assert(out_buff.size() == N);
  assert(out_buff.capacity() == N);

  for (int i = 0; i != N; ++i) {
    out_buff.at(i).reserve(vecSizes[i]);
  }

  int i = 0;
  for (auto const& vec : out_buff) {
    assert(vec.size() == 0);
    assert(vec.capacity() == vecSizes[i++]);
  }
}

实例:http://ideone.com/ikm1LR