如何在 C++ 中动态创建向量

1 c++ arrays initialization vector c++11

我正在尝试根据用户输入初始化向量。例如,如果用户提供,n=4那么我必须创建 4 个不同大小的向量。至于向量语法是:

vector<int> v1(x);
Run Code Online (Sandbox Code Playgroud)

所以,同样我想创建v2,v3v4命名向量。

我很迷惑。我怎样才能做到这一点 ?

wal*_*nut 6

各个向量的名称v1, v2, v3, ... 在编译时定义。如果你想有载体的动态数字,你需要vectorvectorS,如:

std::vector<std::vector<int>> vs;
Run Code Online (Sandbox Code Playgroud)

或者如果您已经知道您想要的向量数 n:

std::vector<std::vector<int>> vs(n);
Run Code Online (Sandbox Code Playgroud)

然后,而不是使用v1v2v3,你会使用vs[0]vs[1]vs[2],和你的代码可以动态地使用向量v[i]这里i是一个变量或表达式。

您可以vs使用emplace_back/push_back或将向量添加到resize

vs.emplace_back();

//or

vs.push_back({});

// or

vs.push_back(std::vector<int>());

// or

vs.resize(4);
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,vs将包含四个空向量(如果 vs 已经有超过 4 个向量,则为前 4 个现有向量)。

您可以像往常一样向内部向量添加元素,例如:

vs[0].push_back(42);

vs[2].resize(x);
Run Code Online (Sandbox Code Playgroud)

之后,第一个向量的长度为 1,第三个向量的长度为x

或者您可以x在最后一个向量之后直接插入一个具有大小的向量:

vs.emplace_back(x);

// or

vs.push_back({x});

// or

vs.push_back(std::vector<int>(x));
Run Code Online (Sandbox Code Playgroud)

然后可以使用双索引访问元素,例如

vs[1][14]
Run Code Online (Sandbox Code Playgroud)

读取第二个向量的第 15 个元素。