C++ 当返回类型为vector

C++ 当返回类型为vector,c++,vector,C++,Vector,我试图区分targetSum=0时的返回值和targetSum时的返回值,您可以使用std::optional选择性地返回任何值 例如: 包括 std::可选输入常量布尔标志{ 如果旗{ 返回44; }否则{ 返回std::nullopt; } } //在别的地方。。。 自动一些{maybe{u intflag}; 如果有的话{ //做点什么 } std::optional的行为类似于指针,它可以具有由std::nullopt表示的无效状态,同时具有按值语义,即没有内存分配。在装箱或取消装箱可

我试图区分targetSum=0时的返回值和targetSum时的返回值,您可以使用std::optional选择性地返回任何值

例如:

包括 std::可选输入常量布尔标志{ 如果旗{ 返回44; }否则{ 返回std::nullopt; } } //在别的地方。。。 自动一些{maybe{u intflag}; 如果有的话{ //做点什么 } std::optional的行为类似于指针,它可以具有由std::nullopt表示的无效状态,同时具有按值语义,即没有内存分配。在装箱或取消装箱可选文件时,请记住使用std::move以避免不必要的副本


如果您的编译器不支持C++17,我建议您更新编译器。如果不可能,您可以使用Boost或std::unique\u ptr获得类似的结果。

您的标题与问题正文不匹配

一个std::vector始终是一个vector,它从不为NULL或等于nullptr

无法返回remainderResult的原因。返回数字[i];因为推回的结果是零,不是向量

您需要将_向后推,然后返回

然而,当target为0时,当您查看空向量的第一个元素时,如果您得到结果,您将发现您有未定义的行为

std::vector<int> howSum(int targetSum, std::vector<int> numbers, int size){
    if(targetSum < 0) return {-1};

    for(int i=0; i<size; i++){  
        int remainder = targetSum - numbers[i];
        if (remainder == 0) {
             return { numbers[i] };
        }
        std::vector<int> remainderResult = howSum(remainder, numbers, size);
        if(remainderResult[0] != -1) {
            remainderResult.push_back(numbers[i]);
            return remainderResult;
        }
    }
    return {-1};
}

您正在尝试返回remainderResult的结果。push_back…Null是指针值。向量不能为空。它们可以是空的。后退一步,解释一下这个函数应该做什么。它应该解决的问题是什么?循环和递归的混合很难理解,而且可能没有必要。
vector<int> howSum(int targetSum, vector<int> numbers, int size){
    if(targetSum == 0) return {};
    if(targetSum < 0) return {-1};

    for(int i=0; i<size; i++){  
        int remainder = targetSum - numbers[i];
        vector<int> remainderResult = howSum(remainder, numbers, size);
        if(remainderResult[0] != -1)
            return remainderResult.push_back(numbers[i]);   
    }
    return {-1};
}
std::vector<int> howSum(int targetSum, std::vector<int> numbers, int size){
    if(targetSum < 0) return {-1};

    for(int i=0; i<size; i++){  
        int remainder = targetSum - numbers[i];
        if (remainder == 0) {
             return { numbers[i] };
        }
        std::vector<int> remainderResult = howSum(remainder, numbers, size);
        if(remainderResult[0] != -1) {
            remainderResult.push_back(numbers[i]);
            return remainderResult;
        }
    }
    return {-1};
}