我正在尝试通过引用发送 2D 矢量,但似乎它不适用于几乎相同的方法

i am trying to send a 2d vector by reference but seems like its not working for pretty much same approach

提问人:Mohammed Ashiqur Rahman 提问时间:12/19/2021 最后编辑:Vlad from MoscowMohammed Ashiqur Rahman 更新时间:1/24/2022 访问量:69

问:

    64.minimum-path-sum.cpp: In function ‘int main()’:
    64.minimum-path-sum.cpp:67:23: error: cannot bind non-const lvalue reference of type ‘std::vector<std::vector<int> >&’ to an rvalue of type ‘std::vector<std::vector<int> >’
       67 |         if(minPathSum(vector<vector<int>> {{1 , 2, 3}}) == 12)cout << "ACC\n";
          |                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    64.minimum-path-sum.cpp:57:46: note:   initializing argument 1 of ‘int minPathSum(std::vector<std::vector<int> >&)’
       57 |         int minPathSum(vector<vector<int>> & grid) {
          |    

                    ~~~~~~~~~~~~~~~~~~~~~~^~~~




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

 
int main(){

vector<vector<int>> c{{1 , 2, 3}};
if(minPathSum(c) == 12)cout << "ACC\n"; //No ERROR
else cout << "WA\n";

if(minPathSum(vector<vector<int>> {{1 , 2, 3}}) == 12)cout << "ACC\n"; // ERROR
else cout << "WA\n";
}

将 2d 向量作为参数传递的这两种方法有什么区别?

C++ 常量 C++17 按引用传递 函数声明

评论

0赞 kiner_shah 12/19/2021
不能将匿名向量传递给接受引用的函数。首先将向量存储在某个变量中并传递该变量,它应该可以工作。
5赞 Some programmer dude 12/19/2021
该函数很可能不按值、常量引用或右值引用获取其参数。如果没有一个适当的最小可重复的例子,很难确定任何事情。minPathSum
2赞 Some programmer dude 12/19/2021
另外,请花一些时间阅读为什么我不应该 #include < bits/stdc++.h>?请注意,使用命名空间 std; 是一个坏习惯
0赞 Pepijn Kramer 12/19/2021
要接受临时数据,minPathSum 应该有一个重载 minPathSum(std::vector<std::vector<int>>>&&rhs)。或者,如果您允许一些额外的复制:minPathSum(const std::vector<std::vector<int>>&rhs)。

答:

2赞 Vlad from Moscow 12/19/2021 #1

您正在调用函数,使用带支撑的 init 列表创建该类型的临时对象。minPathSumstd::vector<vector<int>>

因此,编译器会发出一条错误消息,指出您正在尝试将临时对象与非常量左值引用绑定。

只需使用限定符声明函数参数const

int minPathSum( const vector<vector<int>> & grid);