C++ Primer(第五版)练习6.33

#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,什么时候不行?(望大家指点,我也会细细思考后再来更新)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值