如何解决C ++中的向量切片递归
这是使用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 ++重写此函数,而无需修改函数原型,也不想使用静态/全局索引变量。
如果该功能的唯一目的是将其反向编写,则可以使用std::vector::reverse_iterator
。您无需修改输入对象或在递归调用中创建临时对象。
void print_rev(vector<int> &vec)
{
for ( auto iter = vec.rbegin(); iter != vec.rend(); ++iter )
{
print(*iter);
}
}
,
我个人不会使用递归来执行此操作,而是使用反向迭代器,就像@ r-sahu给出的答案一样。但是,如果您确实想使用递归进行此操作,则可能会发生print_rev()
的另一个重载,该重载需要使用迭代器。这样可以避免每次调用print_rev()
时都要创建一个新的临时向量:
#include <vector>
#include <iostream>
using Iter = std::vector<int>::iterator;
void print_rev(Iter start,Iter end)
{
if (start == end)
return;
print_rev(std::next(start),end);
std::cout << *start;
}
void print_rev(std::vector<int> &vec) {
print_rev(vec.begin(),vec.end());
}
int main() {
std::vector<int> v = {1,2,3,4,5};
print_rev(v);
}
输出:
54321
这里是demo。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。