c++ - 如何在 C++ 中从 main() 调用向量函数?
问题描述
我正在尝试调用“解决方案”类中的向量函数“twoSum”,但是当我尝试调用该函数时,却给了我“预期的变量名或 lambda 捕获列表中的“this”错误。
这是代码:
#include <iostream>
#include <list>
#include <vector>
using namespace std;
class Solution {
public:
vector<int> twoSum(vector<int>& nums, int target) {
for (int i=0; i+1<=nums.size(); i++){
if ((nums[i] + nums[i+1]) == target){
//cout << "[" << i << i+1 << "]";
return (i,i+1);
}
}
return {2, 3};
}
};
int main()
{
Solution solobject;
solobject.twoSum([1,2],2); //Not Calling function
return 0;
}
我究竟做错了什么?
解决方案
在 C++ 中,您不能std::vector
使用[1, 2]
表达式创建 a。
最相似的事情将隐式创建std::vector
by 列表初始化器的实例{1, 2}
。std::vector
在和std::initializer_list
文档中查看有关此内容的更多信息。
此外,传递给函数也会有问题。因为现在您的签名接受非常量左值引用vector<int>& nums
,而您正在传递一个右值。
您需要使您的方法接受这样的值:
vector<int> twoSum(vector<int> nums, int target)
或接受一个右值:
vector<int> twoSum(vector<int>&& nums, int target)
main()
或在调用方法之前创建向量的实例。
此外,正如@Stephen Newell 所述,您可能希望将其作为const
参考,因为我们不会更改std::vector
方法中的:
int main()
{
Solution solobject;
auto vec = std::vector<int>({1,2})
solobject.twoSum(vec,2); //Not Calling function
return 0;
}
正如@tangy 所提到的,我们不能创建std::vector
with (i,i+1)
,我们需要使用相同的初始化列表 with {i, i + 1}
。
推荐阅读
- aem - AEM - 如何在 OSGi 组件中检索 model-json
- regex - 在 htaccess 中删除 php 扩展会返回内部服务器错误 (500)
- javascript - 下载图像时在 html2canvas 中忽略不透明度值
- azure - 为什么我使用 Azure 服务管理 API 得到 403?
- arrays - 在 Bash 脚本中尝试将局部变量传递给 SSH,然后执行其他命令
- resharper - Resharper 显示潜在的修复 (ctrl + .) 不适用于 stylecop
- javascript - Regex - JavaScript,匹配函数第二个参数的正则表达式
- r - 警告消息:'c:/Rtools/mingw_/bin/g++' 未找到
- audio - wav_pcm 的 FFmpeg 奇怪的编解码器 ID
- php - 从插入到数据库中排除经过验证的数组对象