【问题标题】:Method defined in class doesn't return anything when called in main类中定义的方法在 main 中调用时不返回任何内容
【发布时间】:2019-11-04 13:41:49
【问题描述】:

我不明白为什么 Solution 类中的 twoSum 方法在 main 中调用时不输出任何内容。请告诉我为什么。程序应该输出两个数字的位置,它们一起等于目标变量。此属性只有一个有效集合。你可以在 leetcode 上找到这个问题:

给定一个整数数组,返回两个数字的索引,使它们相加为特定目标。

您可以假设每个输入都只有一个解决方案,并且您不能两次使用相同的元素。

#include <iostream>
#include<vector>
#include<map>
using std::vector;
using std::map;
class Solution {
public:
        vector <int> twoSum(vector<int>& nums, int target) {
        map <int,int> mymap;
        vector <int> res;
        for(int i=0; i<nums.size(); i++)
        {
            mymap[nums[i]]=i;
        }
        for(int i=0; i<nums.size(); i++)
        {
            int result = target - nums[i];
            if(mymap.find(result)!=mymap.end() && mymap[result] != i)
            {
                res.push_back(i);
                res.push_back(mymap[result]);

                return res;
            }
        }

        return res;
    }

};
int main()
{
    vector<int> nums(4);
    int target;
    for(int i=0;i<4;i++)
    {
        std:: cin>> nums[i];
        std:: cout<<nums[i]<<' ';
    }
    std:: cin>>target;
    Solution abc;
    abc.twoSum(nums,target);
    return 0;
}

///对于array=[1,2,3,4] 和target= 6,我希望输出是[1,3]。相反,它不会打印出任何东西

【问题讨论】:

  • 那是因为你不打印任何东西????‍♂️
  • twoSum 没有任何IO,那它怎么显示呢?
  • 你也忽略了twoSum的返回值。
  • 您没有将函数的返回值存储在任何地方。您甚至都没有尝试 打印函数返回的内容。为什么你期望任何我不理解的输出。
  • 我认为您将“输出”与“控制台上打印的内容”混淆,“输出”与“函数返回的值”混淆。后者是不可见的,除非调用该函数的代码获取该值并打印它。

标签: c++ class oop stl


【解决方案1】:

您将“输出”混淆为“控制台上打印的内容”,而“输出”则混淆为“函数返回的值”。

main 中的abc.twoSum(nums,target); 调用返回一个整数向量。在 C 和 C++ 中,返回值可能会被忽略,然后直接丢失。

如果你想打印一些东西,你必须将函数的返回值存储在一个变量中,或者直接使用它然后实际打印它。

【讨论】:

    猜你喜欢
    • 2014-01-25
    • 2013-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-23
    • 2020-01-26
    • 2018-10-21
    • 2019-03-05
    相关资源
    最近更新 更多