vector<int> * gen_vector(const size_t &size) { return new vector<int>(size, 0); } void get_data((vector<int> *ptr) { auto iter = ptr->begin(); while(cin>>*iter++ && iter != ptr->end()); } void display_data(vector<int> *ptr) { for(const auto &v : *ptr) { cout<<v<<" "; } cout<<endl; delete ptr; } auto ptr = gen_vector(10); get_data(ptr); display_data(ptr);
在写get_data的时候犯了一个错误,代码如下
void get_data((vector<int> *ptr) { auto vec = *ptr; // 这里拷贝了一份ptr指向的vector,所以下面iter访问的是拷贝vector的空间 auto iter = vec.begin(); // 而不是ptr指向的空间。 while(cin>>*iter++ && iter != vec.end()); }
shared_ptr版本
shared_ptr<vector<int>> gen_vector(const size_t &size) { return make_shared<vector<int>>(size, 0); } void get_data(shared_ptr<vector<int>> ptr) { auto iter = ptr->begin(); while(cin>>*iter++ && iter != vec->end()); } void display_data(shared_ptr<vector<int>> ptr) { for(const auto &v : *ptr) { cout<<v<<" "; } cout<<endl; } auto ptr = gen_vector(10); get_data(ptr); display_data(ptr);