From vector未命名类型To预期的非限定id / C++蛮力

ykejflvf  于 2023-01-22  发布在  其他
关注(0)|答案(1)|浏览(166)

长话短说。我正尝试在VSStudioIDE中运行这段代码。

#include <iostream>
#include <vector>

using std::vector;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if(nums[i] + nums[j] == target){
                    return {i, j};
                }
            }            
        }
        return {};
    }
};

我不得不添加#include来解决第一个问题。但现在它说:

类范围内非成员的using声明
在“〈”标记之前需要未限定的ID

情节变得复杂起来。它在没有#include的leetcode上运行得很好。这些都没有发生。
这是一个向量问题还是什么?为什么VS Studio代码讨厌这个,但它在leetcode上运行良好?https://leetcode.com/problems/two-sum/solutions/1439021/c-brute-force-hashmap-solutions/?q=brute&orderBy=most_votes&languageTags=cpp

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if(nums[i] + nums[j] == target){
                    return {i, j};
                }
            }            
        }
        return {};
    }
};

OG代码。
先谢了。

xbp102n0

xbp102n01#

虽然我不建议在头层使用using,因为名称空间冲突,但如果你真的想使用它,可以考虑下面的版本:

#include <iostream>
#include <vector>

using namespace std;

class Solution {
public:
    vector<int> twoSum(vector<int>& nums, int target) {
        for(int i = 0; i < nums.size(); i++){
            for(int j = i + 1; j < nums.size(); j++){
                if(nums[i] + nums[j] == target){
                    return {i, j};
                }
            }            
        }
        return {};
    }
};

也就是说,大多数人会同意下面的方法看起来更“现代”

#include <iostream>
#include <vector>
#include <tuple>
#include <optional>

class Solution {
public:
    std::optional< std::tuple<int,int> > twoSum( const std::vector<int>& nums, int target) {
        for( int i = 0; i < nums.size(); i++) {
            for(int j = i + 1; j < nums.size(); j++) {
                if( nums[i] + nums[j] == target){
                    return {{i, j}};
                }
            }            
        }
        return {};
    }
};

int main() {
    std::vector<int> vec{1,2,3,4};
    int total = 5;
    Solution s;
    auto result = s.twoSum( vec, total );
    if ( result ) {
        auto [i,j] = result.value();
        std::cout << vec[i] << " + " << vec[j] << " = " << total << std::endl;
    }
}

相关问题