目录
目录
【……】 实参与形参的传递方式:值传递,引用传递,地址传递【带扩充】
顺序容器/序列容器(Sequential Containers)
关联容器(Associative Containers)按排序方式存储数据,就像词典一样 方便搜索
容器适配器(Associative adapters)(栈,队,优先队列)
面向对象:py,c艹,Java都是,但c是面向过程
特征:
抽象、封装、继承、多态
继承机制:
允许程序员在保持原有类特性的基础上,进行更具体、更详细的说明。
多态:
同一段程序能处理多种类型对象。在 C++ 中,多态有强制多态(如类型转换)、重载多态(如函数重载、运算符重载)、类型参数化和虚函数、模板等。
对象
成员函数既可以访问目的对象的私有成员,也可以访问所在类的其它对象的私有成员。
内敛成员函数【是啥】:
使用内联函数可以减少调用开销,提高效率,但只适合相当简单的函数。
构造函数和析构函数
构造函数:负责对象初始化。
析构函数:在对象被释放时自动调用的函数。
构造函数与析构函数是两类特殊的成员函数,每个类都有。
构造函数
class Clock{public:Clock(int x, int y, int z); // 构造函数
void SetTime(int h=0, int m=0, int s=0);void ShowTime();private:int hour, minute, second;};
// 构造函数的定义
Clock::Clock(int x, int y, int z){ hour=x; minute=y; second=z; }
注意:构造函数前不能加数据类型或 void!
复制构造函数/拷贝构造函数:
一类特殊的构造函数,将已有对象的指复制给其它对象
例:自定义复制构造函数:
Point::Point(Point & p) // 复制构造函数的定义
{x=p.x; y=p.y;cout << "自定义复制构造函数被调用!" << endl;}.
默认的复制构造函数何时调用?用=赋值时
int main()
{Point A(1,2);
Point B(A); // 用 A 初始化 B,自定义复制构造函数被调用
Point C=A; // 与上面语句完全一样
Point D;
D=A; // 赋值,默认复制构造函数被调用!
cout << B.getx() << endl;return 0;}
对象可以作为成员函数和非成员函数的参数
【……】 实参与形参的传递方式:值传递,引用传递,地址传递【带扩充】
匿名对象
非匿名对象构造函数缺省的话不要小括号
Clock c2; // OK,全部使用缺省值时不要加小括号!
Clock c2(); // ERROR
匿名对象要
析构函数
► 析构函数的函数名由类名前加“~”组成
► 析构函数没有返回值
► 析构函数在对象生存期即将结束时被自动调用
► 析构函数不接收任何参数
► 若没有自定义析构函数,系统会自动生成一个缺省析构函数(函数体为空,如:~Point() { } )
————————————————————以上为第九讲
STL
顺序容器/序列容器(Sequential Containers)
array 数组,长度不能改变
vector 只能在最后面插入或删除数据
deque 与 vector 类似,但允许在最前面插入或删除数据
list 双向链表,可在任意位置插入或删除数据f
orward_list 与 list 类似,但是单向的,只能沿一个方向访问
string 字符串,与 vector 类似,但存储的是字符
关联容器(Associative Containers)按排序方式存储数据,就像词典一样 方便搜索
set 存储互不相同的数据,插入数据时进行排列
unordered_set 与 set 类似,但按 Hash 值排序
map 存储“键-值”对,按唯一的键排序
unordered_map 与 map 类似,但按“键”的 Hash 值排序
muti:
multiset 与 set 类似,但允许有相同的数据
unordered_multiset 与 unordered_set 类似,但允许有相同的数据
multimap 与 map 类似,但不要求“键”唯一
unordered_multimap 与 unordered_map 类似,但不要求“键”唯一
容器适配器(Associative adapters)(栈,队,优先队列)
顺序适配器和关联适配器的变种,增加一些特殊功能
stack 栈,按后进先出(LIFO)方式存储数据
queue 队列,按先进先出(FIFO)方式存储数据
priority_queue 队列,但能保证最大元素总在最前
对容器的算法
find 查找指定的值
find_if 根据条件查找
reverse 反转
remove_if 根据条件删除相应的数据
transform 根据用户给定的方法对数据进行交换
容器的成员函数
begin() 返回开始迭代器end() 返回结束迭代器
size() 返回实际元素个数
capacity() 返回当前容量
empty() 判断是否为空
max_size() 返回元素个数的最大值
front() 返回第一个元素的引用
back() 返回最后一个元素的引用
push_back() 在序列的尾部添加一个元素
pop_back() 移出序列尾部的元素
clear() 移出所有的元素,容器大小变为 0
resize() 改变实际元素的个数
at() 使用索引访问元素,会进行边界检查
assign() 用新元素替换原有内容
insert() 在指定的位置插入一个或多个元素
erase() 移出一个元素或一段元素
swap() 交换两个容器的所有元素
data() 返回包含元素的内部数组的指针【?】
sort() 对元素进行排序
这里仅列出部分成员函数。† 并非所有容器都具有这些成员函数。† 容器不仅使用方便,而且效率也非常高,可代替数组。† 优先使用 vector 和 string
————————————————————————以上为第16讲