【问题标题】:How to create vectors dynamically in C++如何在 C++ 中动态创建向量
【发布时间】:2020-05-05 02:47:41
【问题描述】:

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

vector<int> v1(x);

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

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

【问题讨论】:

  • 你不能那样做。但是你可以有一个 vector 的vector
  • 所有向量都是不同大小的吗?然后用它们各自的大小分别为它们做同样的事情吗?如果它们都相同,则可以有一个向量向量,通过复制来初始化向量,如vector&lt;vector&lt;type&gt;&gt; v(4, vector&lt;type&gt;(x));
  • 要存储在这 4 个向量中的数据和大小是动态的。并且要求是用户可以在这 4 个向量中的任何一个的任何索引处查询值。
  • 你可以有一个std::map&lt;std::string, std::vector&lt;T&gt;&gt;类型的map,然后考虑key是向量名
  • @yksisarvinen 但是所有 4 个向量的大小都是动态的,并且取决于用户输入。

标签: c++ arrays c++11 vector initialization


【解决方案1】:

各个向量的名称v1v2v3,...在编译时定义。如果你想拥有一个动态数量的向量,你需要一个vectorvectors,例如:

std::vector<std::vector<int>> vs;

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

std::vector<std::vector<int>> vs(n);

然后,不要使用v1v2v3,而是使用vs[0]vs[1]vs[2],并且您的代码可以动态使用向量v[i],其中@987654335 @ 是变量或表达式。

您可以使用emplace_back/push_backresizevs 添加矢量:

vs.emplace_back();

//or

vs.push_back({});

// or

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

// or

vs.resize(4);

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

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

vs[0].push_back(42);

vs[2].resize(x);

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

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

vs.emplace_back(x);

// or

vs.push_back({x});

// or

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

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

vs[1][14]

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

【讨论】:

    猜你喜欢
    • 2015-05-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多