C++Primer第五版 12.1.2节练习

来源:互联网 时间:1970-01-01

练习12.6:编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。

/**练习12.6 *2015/11/2*问题描述:练习12.6:编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。 *说明:指针学习 fun(),fun2(),fun3() 分别实现三个函数的要求 *作者:Nick Feng*邮箱:[email protected] */ #include <iostream>#include <vector>#include <memory>using namespace std;/*编写函数,返回一个动态分配的int的vector。*/ vector<int>* fun(){ vector<int> *p = new vector<int>; return p;//分配一个动态内存 delete p;}/*将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。 */vector<int>* fun2(){ vector<int>*q = fun(); int val; while(cin >> val) (*q).push_back(val);//将这些数字压入到vector中 return q; delete q;}/*再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。*/ void fun3(){ vector<int>*r = fun2(); for(int i = 0; i != (*r).size(); ++i) cout << (*r)[i] << " ";//打印序列 cout << endl; delete r;}int main(){ fun3(); return 0;}

练习12.7:重做上一题,这次使用shared_ptr而不是内置指针。

/**练习12.7 *2015/11/2*问题描述:练习12.7:重做上一题,这次使用shared_ptr而不是内置指针。练习12.6:编写函数,返回一个动态分配的int的vector。将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。 *说明:指针学习 fun(),fun2(),fun3() 分别实现三个函数的要求 ,和12.7不一样的地方在于,只能指针的内存管理不要你烦了 *作者:Nick Feng*邮箱:[email protected] */ #include <iostream>#include <vector>#include <memory>using namespace std;/*编写函数,返回一个动态分配的int的vector。*/ shared_ptr<vector<int>> fun(){ shared_ptr<vector<int>> p = make_shared<vector<int>>(); return p;//分配一个动态内存 }/*将此vector传递给另一个函数,这个函数读取标准输入,将读入的值保存在vector元素中。 */shared_ptr<vector<int>> fun2(){ shared_ptr<vector<int>> q = fun(); int val; while(cin >> val) (*q).push_back(val);//将这些数字压入到vector中 return q;}/*再将vector传递给另一个函数,打印读入的值。记得在恰当的时刻delete vector。*/ void fun3(){ shared_ptr<vector<int>> r = fun2(); for(int i = 0; i != (*r).size(); ++i) cout << (*r)[i] << " ";//打印序列 cout << endl;}int main(){ fun3(); return 0;}

练习12.8:下面的函数是否有错误?如果有,请说明错误原因。

bool b(){ int *p = new int; //... return p;}

答:有错误,函数的返回类型应该是bool类型,函数内部返回了一个int型的指针,错误。

练习12.9:解释下面代码执行的结果:

int *q = new int(42), *r = new int(100);r = q;//两个指针都指向42,占用两段内存auto q2 = make_shared<int>(42), r2 = make_shared<int>(100);r2 = q2;//两个指针都指向42,但是共享一段内存



相关阅读:
Top