#include <iostream>
#include <string>
#include <vector>
using namespace std;
void print_vector(vector<int>::iterator ptr, vector<int> &a) // 1
{
if (ptr != a.begin())
print_vector(ptr - 1, a); //2
cout << *ptr << endl;
}
int main()
{
vector<int> str{ 1,2,3,4,5,6,7,8,9 };
print_vector(str.end() - 1, str); //3
system("pause");
return 0;
}
个人注释:
1、该递归函数是void类型,有两个形参,第一个为vector<int>::iterator ptr ,(vector<int> 是向量类型,而vector<int>::iterator是向量的迭代器类型,vector<int>::iterator用于迭代vector<int>中的int数据);第二个为 vector<int> &a,注意是一个传递的是一个vector<int>类型的引用参数。
2、该步骤即为递归函数中最主要的部分,再次调用print_vector函数,直至ptr指向a引用的vector中的第一个对象。
下面用表格的形式显示当给print_vector函数传入str函数后的函数执行轨迹:
3、注意end()函数指向的是容器的最后一个元素的下一个位置,切不可直接对XXX.end()直接解引用。
4、由是想到函数参数的一些问题:何时传入引用,何时传入指针?二者的优劣(如果有的话)?什么时候应该使用const,什么时候不行?(望大家指点,我也会细细思考后再来更新)