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