【发布时间】:2020-12-14 20:02:16
【问题描述】:
这是一个使用python反向打印列表的简单函数。
def print_list(lst):
if not lst:
return
print_list(lst[1:]) # How to achieve this slicing in C++ vector without any global, static variable.
print(lst[0], end=" ")
我必须在不修改函数原型的情况下用 C++ 重写这个函数,而且我不想使用静态/全局索引变量。
C++ 函数原型和伪代码。
void print_rev(vector<int> &vec) {
if(it reaches vector end)
return;
print_rev(vec[1:])
print(vector elements during stack unwinding phase)
}
如何像python函数一样对向量进行切片?
【问题讨论】:
-
如果您必须保留该签名,则您要求在每次递归调用中制作向量的本地副本。在 c++20 中,您可以使用
std::span。这样会很高效,而且语法也很简单。 -
Python 不是 C++。您使用 C++ 范例和习语解决了 C++ 问题,却忘记了 python 的存在。这适用于任何语言——您不会使用另一种语言作为模型以一种语言编写代码。
-
“重写而不修改函数签名”并不意味着你必须用递归来实现它。只需使用反向迭代器就可以完成这项工作。不相关,但是当函数显然不应该修改向量时,使用非常量引用参数定义此函数通常被认为是 C++ 中的不良风格。
标签: python c++ list recursion vector