6.10 智能指针
C++11 提供智能指针的数据类型,对垃圾回收技术提供了一些支持,实现一定程度的内存管理
unique_ptr:不允许多个指针共享资源,可以用标准库中的move函数转移指针
shared_ptr:多个指针共享资源
weak_ptr:可复制shared_ptr,但其构造或者释放对资源不产生影响
6.11 vector对象
为什么需要vector?
封装任何类型的动态数组,自动创建和删除。
数组下标越界检查。
例6-18 中封装的ArrayOfPoints也提供了类似功能,但只适用于一种类型的数组。
vector对象的定义
vector<元素类型> 数组对象名(数组长度);
如;vector<int> arr(5)
vector数组对象名不表示数组首地址
//6-20vector应用举例 #include<iostream> #include<vector> using namespace std; double average(const vector<double> &arr){ double sum = 0; for(unsigned i = 0; i < arr.size(); i++) sum += arr[i]; return sum / arr.size(); } int main(){ unsigned n; cout << "n = "; cin >> n; vector<double> arr(n);//创建数组对象 cout << "Please input " << n << " real numbers: " << endl; for(unsigned i = 0; i < n; i++) cin >> arr[i]; cout << "Average = " << averrage(arr) << endl; return 0; }
//基于范围的for循环配合auto举例 #include<vector> #include<iostream> using namespace std; int main(){ vector<int> v = {1,2,3}; for(auto i = v.begin(); i != v.end(); i++)//begin得到起始“指针”,end得到结束“指针” cout << *i << endl; for(auto e:v)//基于范围 cout << e << endl; return 0; }