创建二维 std::vector

creating a two dimensional std::vector

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

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,因为使用大向量需要时间,有没有办法做到这一点?

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

一种替代方法可能不是实际更改大小,而是调用 reserve,它只是分配内存但实际上并不插入任何元素。报告的大小仍为零,但 capacity 至少会 return 传递给 reserve 的大小。

这是一个完整的程序,对 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