【发布时间】:2019-03-18 03:06:11
【问题描述】:
我正在尝试通过以下代码找出使用向量向量的正确方法:
#include <vector>
using namespace std;
void f(int size) {
vector<int> v;
v.reserve(size);
v[0] = 1; // OK
vector<vector<int> > vv;
vv.reserve(size);
// vv.push_back(v); // everything is OK with this
vv[0].push_back(1); // Crash
vv[0] = {1}; // Crash
}
int main() {
f(3);
}
但我想知道为什么我不能像使用矢量一样使用矢量的矢量?为什么我不能将 vv 的成员(向量的向量)直接与 push_back 一个向量一起使用?
【问题讨论】:
-
v[0] = 1; // OK不行好的。向量的大小为 0。使用resize,而不是reserve。 -
几件事,真的不需要为向量传递大小,它们是动态的,只需使用 push_back()。是的,您可以随时调用 resize(size)。你到底想用 vv[0].push_back(1) 做什么。请记住,您正在尝试将整数向量 (vector
) 推入向量中。 1 不是一个向量 而是一个整数。 -
@tkausl 谢谢。我滥用了储备金。使用 resize(),代码按预期工作。
-
@OmidCompSCI 谢谢。是的,我应该使用调整大小。使用 vv[0].push_back(1),我的意思是 push_back int 1 到 vv 中的第一个向量,以确保 vv[0] 是可访问的。