【问题标题】:2-D vector Size二维矢量大小
【发布时间】:2020-01-07 16:25:18
【问题描述】:

在 C++ 中,我编写了一个包含 2D 向量的代码,并且要求用户提供 2D 向量中的输入。我觉得很难找到那个不。在 size 函数的帮助下,2 个向量中的行数。

#include <bits/stdc++.h>
#include <vector>
using namespace std;

int diagonalDifference(vector<vector<int>> arr)
{
    int d = arr[0].size();
    cout << d;
    return 0;
}

int main()
{
    int size;
    cin >> size;
    vector<vector<int>> d;
    for (int i = 0; i < size; i++)
    {
        d[i].resize(size);
        for (int j = 0; j < size; j++)
        {
            cin >> d[i][j];
        }
    }
    cout << diagonalDifference(d);
}

输出应该是 No. Rows ,但它是 NULL

【问题讨论】:

  • 警告:将#include &lt;vector&gt;#include &lt;bits/stdc++.h&gt; 一起使用表明您不知道#include &lt;bits/stdc++.h&gt; 的作用。在你研究和理解之前不要使用东西。也就是说,一旦您了解了 #include &lt;bits/stdc++.h&gt; 的作用及其含义,您可能就不想使用它了。但是,如果您继续使用它,请务必小心将其与 using namespace std; 结合使用,因为它们更容易发生彼此的一些最坏影响。

标签: c++ vector resize 2d-vector


【解决方案1】:

这里

vector<vector<int>> d;
for (int i = 0; i < size; i++)
{
    d[i].resize(size);
    //...

d 是大小为0 的向量,访问d[i] 超出范围。您似乎意识到您首先必须调整内部向量的大小,但您错过了对外部向量执行相同操作。我真的不明白您的代码如何在没有段错误的情况下为arr[0].size(); 打印任何内容。总之,问题是arr[0]处没有元素。

【讨论】:

    【解决方案2】:

    但是首先,看看你的函数参数 -> 是你的向量的副本,使用 (vector & my vec) 来避免向量类的复制机制(例如复制构造函数),因为如果你把你的向量放在那里作为参数,您将在函数括号内进行一些更改,您将看不到任何结果(如果您不想从函数 main 更改主向量,请保持不变)。

    其次,看下面粘贴的代码sn-p。

    std::vector<std::vector<typename>> my_vector{};
    my_vector.resize(width);
    for (size_t i = 0; i < my_vector.size(); ++i)
    {
        my_vector[i].resize(height);
    }
    

    它给你二维向量

    矢量的运算符 [] 已重载,您必须使用 my_vector[0].size() my_vector[1].size() 等等!我建议按 c++ 标准中给出的循环类型显示大小

    问候!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-30
      • 2017-05-10
      • 1970-01-01
      • 1970-01-01
      • 2012-12-14
      • 2018-01-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多