Part6 数组、指针与字符串 6.10 智能指针 6.11 vector对象

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;
}

 


 

posted @ 2017-12-13 20:32  LeoSirius  阅读(175)  评论(0编辑  收藏  举报