我正在尝试通过引用发送 2d 矢量,但似乎它不适用于几乎相同的方法
Posted
技术标签:
【中文标题】我正在尝试通过引用发送 2d 矢量,但似乎它不适用于几乎相同的方法【英文标题】:i am trying to send a 2d vector by reference but seems like its not working for pretty much same approach 【发布时间】:2022-01-21 09:55:22 【问题描述】: 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>> c1 , 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";
这两种将二维向量作为参数传递的方法有什么区别??
【问题讨论】:
您不能将匿名向量传递给接受引用的函数。首先将向量存储在某个变量中并传递该变量,它应该可以工作。minPathSum
函数很可能不会通过值、常量引用或右值引用来获取其参数。如果没有合适的minimal reproducible example,很难确定任何事情。
另外请花点时间阅读Why should I not #include <bits/stdc++.h>?并注意using namespace std;
is a bad habit
要接受临时变量 minPathSum 应该有一个重载 minPathSum(std::vector<:vector>>>&& rhs)。或者,如果您允许进行一些额外的复制: minPathSum(const std::vector<:vector>>& rhs).
【参考方案1】:
您正在调用函数minPathSum
,使用花括号初始化列表创建std::vector<vector<int>>
类型的临时对象。
因此编译器会发出一条错误消息,表明您正在尝试将临时对象与非恒定左值引用绑定。
只需用限定符const
声明函数参数
int minPathSum( const vector<vector<int>> & grid);
【讨论】:
以上是关于我正在尝试通过引用发送 2d 矢量,但似乎它不适用于几乎相同的方法的主要内容,如果未能解决你的问题,请参考以下文章