之前对于容器类,没有一个很系统的了解。后来才专门看了 《C++ GUI Qt 编程》的这一部分内容,做一下笔记。需要先说的是,这里对 C++自身的 STL 容器类只是附带提下,不是很深刻。
容器类,就是一些对象,可以承载其他类对象,并且具有成熟的对自己这些元素的操作函数的类。这个可能和数组之类的有点像,但是在设计概念上,应该是远远高于数组之类的。我觉得容器类是提供了完整而封装得极好的数据结构,来实现强大的,完美的可操作性。
另外,需要说明的是,容器类(C++及Qt)都有一些相关的操作符,这一块还不是特别了解,等到以后进一步了解操作符,再补充。
对于容器类的表示方式如:
Vector<项类名> Vecotor对象名 一类的。
向量(Vector):
向量是把它的项存储在内存中相近的位置的一种数据结构。在向量末尾添加额外的元素是非常快速的,但是在其前面或者中间插入元素是耗时的。向量可以一开始就设置长度,也可以不设置(通常也不设置吧)。STL有提供 [] 操作符给 Vector。Qt的等价类也提供了一些操作符,具体去帮助文档看(包括函数之类)。
组装向量的一个方式就是使用 push_back 方法,即是尾插了。
Qt中,等价的类,是 QVector 类。
列表(List):
列表,或者链表,是把它的 item 储存在内存中非相近的地方的数据结构。不像向量一样, list 的随机访问效果慢(这是取决于它的存储方式),但是 insert(),erase()非常迅速。STL支持使用push_back()和insert()添加新的项 。和 Vector 不同,它可以在中间和开头插入。但因为访问的效果差,所以很多情况时使用向量。
STL没有提供 [] 操作符给 List。所以只能使用迭代器来遍历列表的元素(Qt的等价类支持 [] 操作符,但是也挺花时间的)。
Qt中的等价类是,QList。
映射(Map):
Map,作为映射,保存的是同一个类型的任意多个性。Map 使用 键值对 这样的形式。映射具有很方便的随机访问和插入性能。如果一个新的值被赋值到一个已经存在的键上,旧的值就会被覆盖。
STL 的map 形