首页 > 解决方案 > 如何在 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++arraysfunctionoopvector

解决方案


在 C++ 中,您不能std::vector使用[1, 2]表达式创建 a。

最相似的事情将隐式创建std::vectorby 列表初始化器的实例{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::vectorwith (i,i+1),我们需要使用相同的初始化列表 with {i, i + 1}


推荐阅读