C++ 读书笔记

来源:互联网 发布:手机我的世界端口 编辑:程序博客网 时间:2024/05/21 17:10

容器的类型约束

 

C++语言中,大多数类型可以作为容器的元素类型。容器元素类型必须满足以下两个条件:

1.元素类型必须支持赋值操作;

2.元素类型的对象必须可以复制。

IO库类型不支持复制或赋值,因此不能创建存放IO类型对象的容器。

 

 

 

 

容器的选择

vector和deque支持快速随机访问,但在容器的任意位置插入或者删除元素付出的代价高。list可以在任意位置快速插入和删除元素,但不支持随机访问。选用容器时应考虑元素是否需要随机访问,并且要在什么位置经常进行插入和删除操作。

 

 

因为为了使得算法能够独立于容器,真正成为“泛型”算法。

 

构造函数不能为const

 

构造函数可以认为有两个阶段:初始化阶段和普通的计算阶段,计算阶段是由构造函数体内的所有语句组成。类的数据成员总是在计算阶段开始之前进行初始化,如果没有使用初始化列表进行初始化操作,与在构造函数内进行赋值操作在效率上是有区别的。如果没有为类成员提供初始化式,则编译器会隐式地使用成员类型的默认构造函数。如果那个类没有默认构造函数,则编译器的尝试将会失败,此时必须显式提供初始化式。

因为内置类型(如int)的成员不进行隐式初始化,所以对这些成员是进行初始化还是赋值似乎是没有影响的。但是除了以下两种情况:1.const对象 2.引用对象

为啥呢?因为不能给一个const对象或引用对象在初始化后进行赋值,所以必须在初始化列表中进行初始化,否则在构造函数中进行赋值操作是错误的!!!谨记

 

 

 

 

算法不改变容器的大小

容量与长度

连续存储元素的容器需要支持“容量”的概念,因为连续存储元素的容器涉及内存分配与再分配的问题。而非连续存储元素的容器不存在这种问题。

 

迭代器的操作

只有vector和deque的迭代器操作包括+,-,+=,-=,-,>,>=,<,<=

list等其他容器并不支持这类操作

 

注意容器中erase的用法,下面是标准用法。

原创粉丝点击