我想创建一个二维向量,其中第一个维度是不变的,第二个维度是不同的,例如
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_back
或resize
因为使用大型向量需要时间,有没有办法做到这一点?
答案 0 :(得分:0)
必须构建std::vector
中的元素,因此为了创建所需大小的向量,您必须使用push_back
或resize
(最好{{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++]);
}
}