我正在尝试通过引用发送 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&lt;vector&lt;int&gt;&gt; 类型的临时对象。

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

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

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

【讨论】:

以上是关于我正在尝试通过引用发送 2d 矢量,但似乎它不适用于几乎相同的方法的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 2d 矢量成员引用对象

索引 2D 矢量正在使我的程序崩溃

2d(3d)坐标的散列图(即双精度矢量)?

通过引用传递 2D 矢量

如何矢量化 3x3 2D 卷积?

通过 C# 通过 Outlook 2010 发送电子邮件