C++ Primer 第五版课后题
练习6.32 :下面的函数合法吗?如果合法,说明其功能;如果不合法,修改其中的错误并解释原因。
#include <iostream> using namespace std; int &get(int *arry, int index) { return arry[index]; } int main() { int ia[10]; for (int i = 0; i != 10; ++i) get(ia, i) = i; return 0; }
合法。给ia数组中的每个元素赋值。返回的是引用类型,得到的是左值,所以可以被赋值。
练习6.33 :编写一个递归函数,输出vector对象的内容。
#include <iostream> #include <vector> using namespace std; typedef vector<int>::iterator vec_ip; void re_print_vector(vector<int> &vec, vec_ip id) { if (id != vec.end()) { cout << *id << endl; re_print_vector(vec, ++id); } } int main() { vector<int> vec; for (int i = 1; i <= 10; ++i) vec.push_back(i); re_print_vector(vec, vec.begin()); return 0; }
//命名真是太困难了。
开始我的re_print_vector声明的是(vector<int> vec, vec_ip id),并没有引用,于是死循环= =,后来发现传递的是形参,那么形参的存储位置和实参一定不相同啊= =,id用永远不可能等于形参vec.end()。
我为什么想到的是用迭代器呢?直接用数字下标岂不是简单的多[汗]。