【问题标题】:C++: pair<vector<int>,vector<int>> p;C++: 对<vector<int>,vector<int>> p;
【发布时间】:2016-06-02 10:14:23
【问题描述】:

我们可以使用 c++ STL 来做这样的事情吗?如果是,我将如何初始化元素?我试图这样做,但它不起作用。

 pair<vector<int>,vector<int>>p;
 p.first[0]=2;

【问题讨论】:

  • 当某些东西不起作用时,请考虑如何它不起作用。它编译吗?它会给出错误的结果吗?你期待什么结果?
  • 只是出于好奇,你想做什么?
  • 不要组合你甚至不能独立使用的东西。赞成票来自哪里?

标签: c++ vector stl std-pair


【解决方案1】:

我们可以使用 c++ STL 做这样的事情吗

是的。不过,您可能正在使用standard library。

如果是,我将如何初始化元素?

初始化元素的方式与初始化不在一对中的向量的元素相同。 List-initialization 是一个不错的选择。

我试图这样做,但它不起作用。

您正在尝试修改向量中从未放入的元素。查看描述operator[] 功能的页面。它没有说明它将元素添加到向量中。但是,other functions 可以。

【讨论】:

    【解决方案2】:

    默认情况下,向量没有任何大小,因此您应该首先使用push_back 一些元素或resize 它们。一种初始化 p 的方法是:

    pair<vector<int>, vector<int>> p = {{1,2,3}, {4,5,6}};
    

    【讨论】:

      【解决方案3】:

      p.first 和 p.second(类型为std::vector&lt;int&gt;)将被初始化,但它们仍然是空的,其中没有元素。然后p.first[0] = 2; 会导致UB。

      你可能想要

      p.first.push_back(2);
      

      【讨论】:

        【解决方案4】:

        是的,它可以工作,但是您必须在访问 std::vectors 的元素之前为其分配内存:

        //p now can hold 1 element
        p.first.resize(1);
        

        或者,您可以使用push_back:

        //p now has 1 element with value 2
        p.first.push_back(2).
        

        【讨论】:

          猜你喜欢
          • 2023-01-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2022-08-07
          • 2020-07-15
          • 2012-05-03
          • 2016-11-11
          • 1970-01-01
          相关资源
          最近更新 更多