如何解决尝试在 C++ 中从 JS 重新创建这段代码
我看过一门关于动态编程的课程,老师用 JS 解决了这样的问题。
我理解逻辑,但现在我必须用C++编写它。这是他的代码:
我正在尝试过渡到 C++,但被一些错误所困扰:
std::vector<int> howSum(std::vector<int> numbers,int target)
{
if (target == 0) return std::vector<int>();
if (target < 0) return NULL; /*this doesn't work here because NULL is of type int - what should I do?*/
for (int num : numbers)
{
int remainder = target - num;
std::vector<int> remainderResult = howSum(numbers,remainder);
if (remainderResult != NULL) /*doesn't work*/
{
return remainderResult.push_back(num);
}
}
return NULL; /*doesn't work*/
}
我真的不知道我应该如何像他在 JS 中那样返回 null 并与 null 进行比较,我认为这是我代码的主要问题。
我该怎么做?
解决方法
与 JavaScript 不同,C++ 变量不能保存 null
的值。 NULL
不是它的替代品 - 这只是写 0
的一种奇特方式。从 C++17 开始,标准库有一个可空类型的模板:std::optional
(参见 cppreference)。它的语法部分模仿了指针。
此外,push_back()
不返回结果向量,必须将 return
拆分为单独的语句。
通过这些更改,您的源代码应如下所示:
std::optional<std::vector<int>> howSum(std::vector<int> numbers,int target)
{
if (target == 0) return std::vector<int>();
if (target < 0) return std::nullopt;
for (int num : numbers)
{
int remainder = target - num;
std::optional<std::vector<int>> remainderResult = howSum(numbers,remainder);
if (remainderResult != std::nullopt)
{
remainderResult->push_back(num);
return remainderResult;
}
}
return std::nullopt;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。