【问题标题】:Vector of a Vector troubles向量麻烦的向量
【发布时间】:2013-04-27 00:18:49
【问题描述】:

基本问题你能帮我理解如何使用向量的向量吗?以vector< vector<int> > help 为例。我不明白它是一个整数向量,每个整数都是一个整数向量,还是一个整数向量的向量?我也不明白怎么用。

示例代码

vector< vector<int> > test[500];
test[0].emplace_back(1);
cout << test[0][0];
test[50].emplace_back(4);
cout << " " <<test[50][0];

-console-
1 50 //this is not what happens btw, but it is the desired results

免责声明我花了一大半早上的时间测试和谷歌搜索。请帮助:) 我做了我的硬件。我找不到向量的向量的任何文档。此外,我拥有所有正确的库,并且正在使用命名空间 std。我是一个菜鸟,我知道命名空间是不好的做法,但它现在对我来说非常方便。

基本上我想要的是一个向量的集合大小,每个 pt 都是一个 int 向量。我宁愿不走单独班级的路。是 int 向量的向量,是正确的研究对象吗?

谢谢你:)

【问题讨论】:

  • 你没有向量的向量。你有一个向量数组。
  • 你有一个包含 500 个向量的数组。
  • 所以如果我做了 vector test[500];我会有一个包含 500 个 int 向量的数组?

标签: c++ vector int


【解决方案1】:

test 是一个由 500 个 int 向量组成的数组。您的示例的第二行甚至不应该在这里编译,因为您正在调用 std::vector&lt; std::vector&lt;int&gt; &gt;::emplace_back(),它需要一个与 std::vector&lt;int&gt; 兼容的参数,并且您提供了一个 int。澄清一下:

  • teststd::vector&lt; std::vector&lt;int&gt; &gt;[500]
  • test[0]std::vector&lt; std::vector&lt;int&gt; &gt;
  • test[0][0]std::vector&lt;int&gt;
  • test[0][0][0]int

(Pedantic C++ 开发人员会注意到后三个实际上是引用,但为了清楚起见,我在类型中省略了它。)

【讨论】:

    【解决方案2】:

    您所拥有的是vector-of-vector 的数组,我相信因为您使用两个索引访问数据不是您想要的。

    我相信你可能只是拼错了你的构造函数初始化:

    vector< vector<int> > test(500);   // Note () instead of [] here.
    

    这会创建一个向量中的向量,其中预先为您创建了 500 个内部向量。然后你的其余代码应该可以工作了!

    【讨论】:

      【解决方案3】:

      这是一个 int 的向量:

      std::vector<int> v;
      

      这是一个int向量的向量:

      std::vector<std::vector<int>> v2;
      

      这是一个整数向量的向量数组,这就是你所拥有的:

      std::vector<std::vector<int>> test[500];
      

      该数组的每个元素都是一个std::vector&lt;std::vector&lt;int&gt;&gt;。所以test[0] 就是其中之一。

      如果你想要一个由 500 个默认构造的 int 向量组成的向量,你需要

      std::vector<std::vector<int>> test(500);
      

      【讨论】:

      • 现在在谷歌上搜索数组和向量之间的区别。太棒了,谢谢。
      • 我不能投票给你,因为我没有代表,否则我会感谢你快速简洁的回复
      • @Krtko 不用担心,很高兴它有帮助。
      【解决方案4】:

      vector 只是一个可调整大小的数组。

      要声明int 的向量(一个int 数组),只需:

      std::vector&lt;int&gt; vec;

      要声明一个数组,其中单个元素是向量,您可以这样做:

      std::vector&lt; std::vector&lt;int&gt; &gt; vecarr;

      要设置向量的初始大小,您可以:

      std::vector&lt;int&gt; vec(500); 不是std::vector&lt;int&gt; vec[500],因为这会创建一个包含 500 个 std::vectors 的数组。同样,std::vector&lt; std::vector&lt;int&gt; &gt; vec[500]; 创建一个包含 500 个向量的数组。

      要跳过写std::,您可以在所有这些之前说using namespace std,以表明您正在使用std 命名空间。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-12
        • 1970-01-01
        • 2011-09-30
        • 2011-06-08
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多