1

在 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

4

2 回答 2

3

这里

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

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

于 2019-09-04T18:43:45.790 回答
0

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

其次,查看下面粘贴的代码片段。

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++ 标准中给出的循环类型显示大小

问候!

于 2019-09-04T19:52:28.093 回答