您的位置:首页 > 编程语言 > Go语言

STL学习笔记之 (二)容器 vector

2012-07-24 20:34 183 查看
STL,即Standard Template Library,是C++自带的标准模板库。主要由Alexander Stepanov开发完成,现在已成为C++的一个重要组成部分和特色之处。

STL使用了模板机制,将C++编程分解为了三个相互之间独立的部分:数据类型(基本数据类型、类和结构体)、容器(数组和新的STL容器类)以及算法(Algorithm)。

按照权威介绍,STL由为5个主要的部分组成,分别是:

容器(Container):能够保留并管理对象的对象
迭代器(Iterator):数组指针的抽象,可以在容器上针对不同的数据类型实现相应的算法
算法(Algorithm):顾名思义,就是操作流程
函数对象(Function Object):主要是一些语义规则的抽象,用于自定义容器或者算法
适应器(Adaptor):封装一个部件以提供另外的接口
Borland C++4.0及以上的版本支持STL。Microsoft Visual C++ 5.0及以上的版本支持STL。

使用STL的部件时,需要声明命名空间std。

容器。

STL中的容器分为两类:顺序容器(Sequence Container)和关联容器(Associative Container)。

顺序容器:即俗称的线性表,使用数组或者链表的形式存储和管理数据内容,STL中提供了三种基本的顺序容器:vector、list、deque。

关联容器:提供了基于key的存储管理机制,元素在插入之后就是排好序的,可以很快速地进行查找,STL提供了四种类型的关联容器:set、multiset、map、multimap。其中set和map要求插入的元素是不同的,而multiset和multimap可以插入多个相同的元素。

vector。

vector采用动态数组实现,在连续的内存空间存取数据成员,可以很方便地进行随机访问和后端插入,但是对于中间插入元素的效率比较低。

使用size()可以知道vector中已经存放的元素个数,capacity()可以知道已分配内存的元素个数。由于vector是采用动态分配内存的机制,所以在实际应用中,可以根据需要使用reserve来保持固定大小(最多的元素个数),以避免反复分配内存带来的开销。empty可以用来查看vector是否为空。

可以使用[size_type n]操作符来得到给定索引对应的元素,也可以使用at(size_type n)函数来查看对应索引的元素。front()和back()分别返回vector中第一个和最后一个元素。

push_back(const T&)和pop_back()可以在最后一个位置插入或者删除元素,insert(iterator position, const T& x)和erase(iterator position)可以来插入或者删除任意位置的元素,clear()可以清空整个vector的元素。

begin()和end()分别返回指向第一个元素和最后一个元素之后位置(past-the-end)的迭代器,rbegin()和rend()分别返回反向的指向最后一个元素和第一个元素之前元素的迭代器。

swap(vector&)可以与另外的vector的内容进行交换。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息