private:
int x, y; };
//动态数组类
class ArrayOfPoints { public:
ArrayOfPoints(int size) : size(size) { points = new Point[size]; }
~ArrayOfPoints() {
cout << \ << endl; delete[] points; }
Point &element(int index) {//获得下标为index的数组元素
assert(index >= 0 && index < size);//如果数组下标不会越界,程序中止
return points[index];
}
private:
Point *points; //指向动态数组首地址 int size;
//数组大小
};
int main() { int count;
cout << \; cin >> count;
ArrayOfPoints points(count); //创建对象数组
points.element(0).move(5, 10); //通过访问数组元素的成员 points.element(1).move(15, 20); //通过类访问数组元素的成员
return 0; }
运行结果:
Please enter the number of points:2 Default Constructor called. Default Constructor called. Deleting...
Destructor called. Destructor called.
为什么element函数返回对象的引用?
返回“引用”可以用来操作封装数组对象内部的数组元素。如果返回“值”则只是返回了一个“副本”,通过“副本”是无法操作原来数组中的元素的。 智能指针
● 显式管理内存在是能上有优势,但容易出错。
● C++11提供智能指针的数据类型,对垃圾回收技术提供了一些支持,实现一定程度的内存管理
6.3.4 C++11的智能指针
● 显式管理内存在是能上有优势,但容易出错。
● C++11提供智能指针的数据类型,对垃圾回收技术提供了一些支持,实现一定程度的内存管理
C++11的智能指针
● unique_ptr :不允许多个指针共享资源,可以用标准库中的move函数转移指针 ● shared_ptr :多个指针共享资源
● weak_ptr :可复制shared_ptr,但其构造或者释放对资源不产生影响 6.4 用vector创建数组对象 vector对象 为什么需要vector?
● 封装任何类型的动态数组,自动创建和删除。 ● 数组下标越界检查。
● 例6-18中封装的ArrayOfPoints也提供了类似功能,但只适用于一种类型的数组。 vector对象的定义
● vector<元素类型> 数组对象名(数组长度); ● 例:
vector
■ 与普通数组具有相同形式: vector对象名 [ 下标表达式 ] ● vector数组对象名不表示数组首地址 ■ 获得数组长度 ■ 用size函数 数组对象名.size() 例6-20 vector应用举例
//例6_20 vector应用举例.cpp(P225) #include
//计算数组arr中元素的平均值
double average(const vector
/*声明一个const vector
for (unsigned i = 0; i < arr.size(); i++) sum += arr[i];
return sum / arr.size();
int main() { unsigned n;
cout << \; cin >> n; }
vector
cout << \ << n << \ << endl; for (unsigned i = 0; i < n; i++) cin >> arr[i];
cout << \ << average(arr) << endl; return 0;
运行结果:
基于范围的for循环配合auto举例
//例6_20_2 基于范围的for循环配合auto举例.cpp #include
int main() {
int a[3]={1,2,3};
std::vector
行操作 }
for(auto i = v.begin(); i != v.end(); ++i) std::cout << *i << std::endl; for(auto e : v)
std::cout << e << std::endl; return 0;
运行结果:
vector的几种初始化及赋值方式: (1)不带参数的构造函数初始化 //初始化一个size为0的vector vector
//初始化size,但每个元素值为默认值
vector
vector
//通过数组a的地址初始化,注意地址是从0到5(左闭右开区间) vector
7 第6章 数组、指针与字符串(二)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)
![](/skin/haowen/images/icon_star.png)