返回首页


简介
本文旨在介绍性病的帮助C标准模板库(STL)的容器和迭代:载体。覆盖容器的同时,本文介绍了一些功能的使用的std::向量和覆盖迭代的同时,本文介绍了谓词和函数指针。容器
容器持有其他对象的对象。有两种类型的容器:
1。序列容器:它存储,并允许数据检索顺序。例如Vector类定义一个动态数组,deque的创建一个双端队列,列表提供了一个线性列表。
2。关联容器:它允许值的高效检索键上。例如,地图提供了唯一键的值的访问。因此,地图上存储一个键/值对,并允许其key.nbsp要检索一个值;
容器使用分配器和谓词。
分配器管理memory.nbsp的每个容器都有一个分配器为它定义。分配器为容器管理内存分配。默认分配器分配器类的对象,但如果需要由专门的应用程序,您可以定义自己的的分配器。对于大多数用途,默认分配器就足够了。
一些容器使用功能的一个特殊类型称为谓词。谓词有两个变化:一元和二元。一元谓词带有一个参数,而二元谓词有两个。这些函数返回真/假的结果。但由您定义的确切条件,使他们返回true或false。
Containernbsp; 说明必需的头
的bitset
一组位。
LT; bitsetgt;deque的
双端队列。
LT; dequegt;名单
一个线性列表。
LT; listgt;地图
存储在每个关键是只有一个值相关联的键/值对。
LT; mapgt;
商店,在其中一个关键可能与两个或多个值相关联的键/值对。
LT; mapgt;MULTISET
,其中每个元素不一定是唯一的一套。
LT; setgt;priority_queue
一个优先级队列。
LT; queuegt;队列中
一个正常的队列。
LT; queuegt;设置
,其中每个元素是唯一的一套。
LT; setgt;栈
堆栈。
LT; stackgt;矢量
动态数组。
LT; vectorgt;
迭代器
迭代能力通过存储在容器中的元素周期。他们都或多或少的指针。有五种类型的迭代器:
1。随机存取: 存储和检索值。可随机访问元素。
2。双向:存储和检索值。前进和向后移动。
3。转发:存储和检索值。前移。输入:只检索,但不存储值。前移。
5。输出:唯一的商店,但不检索值。前移。
除了从这个STL还支持反向迭代。他们是双向的,或随机存取。他们在相反的方向移动。例如如果它指向最后一个元素,然后递增指针指向第二个最后一个元素。
让我们了解容器,迭代器和谓语矢量模板类的一个例子:矢量概述
Vector是一个容器类,它实现了动态数组,每个需要成长。矢量模板规范如下所示:
templatenbsp; LT; T类,类Aallocator = LT分配器; TGT; GT类矢量
为了使用矢量,你需要包括LT; vectorgt; 头file.The向量std命名空间中的一部分,所以你需要限定名称。这可以实现如下所示:
使用std::vector的;
vectorlt; intgt; vInts;
,或者你可以完全限定像这样的名称:STD:vectorlt; intgt; vInts;矢量的成员函数功能说明分配清除一个载体和空载体复制指定的元素。在返回在指定的位置向量元素的引用回返回向量的最后一个元素的引用开始返回一个随机访问迭代器在容器中的第一个元素。能力返回元素的载体,也可能包含不分配更多的存储数量。明确删除向量的元素空测试向量容器是空的。结束返回一个随机访问迭代器指向刚刚超越矢量结束抹去移除在指定位置的向量元素或元素范围。前返回一个向量中的第一个元素的引用get_allocator返回一个对象,一个向量使用的分配器类插入在指定位置插入一个元素或到载体的元素数量。MAX_SIZE返回向量的最大长度pop_back在向量的末尾删除元素push_back添加一个元素矢量结束rbegin 在扭转矢量的第一个元素返回一个迭代器烈返回一个迭代器,以相反的向量调整大小指定为载体的新的大小储备保留矢量对象的存储的最小长度。大小返回向量中的元素数量交换交换两个向量的元素。载体构造一个特定的大小或与一个特定的值元素或特定的分配器或其他一些副本向量矢量运算符操作说明运算符[]返回引用的LT;跨度风格= quot; FONT - FAMILY:"信使New'quot; GT;向量元素的指定位置。创建矢量
有几个构造函数为载体容器。以下是最常用的构造函数空载体的诠释:vectorlt; intgt; VINT;矢量持有10 INT:vectorlt; intgt; VINT(10);矢量持有10 INT 0初始化:vectorlt; intgt; VINT(10,INT(0));从另一个向量INT:vectorlt; intgt; vIntA(vIntB)矢量;灌装Vectorstd:vectorlt; CItemgt; m_vItem;m_vItem.push_back(项目);
上面的代码构造m_vItem载体,将举行CItem类型的对象。 puch_back会增加向量的元素。elementsstd访问矢量::vectorlt; CItemgt;:迭代m_iItem;(m_iItem = m_vItem.begin(); m_iItem = m_vItem.end(); m_iItem){ 指数= m_List.InsertItem(0,m_iItem GT; GetNumber()); m_List.SetItemText(指数,1,m_iItem - GT的GetName()); }
上面的代码构造m_iItem迭代。 m_vItem.begin()将初始化向量开始迭代循环,直到它达到m_vItem.end()。代码也添加到列表中的项目。删除向量elementsstd:vectorlt; CItemgt;:迭代结束;= STD::remove_if(m_vItem.begin(),m_vItem.end(),IsSelected)月底;m_vItem.erase(年底,m_vItem.end()); &# 160;
上面的代码定义结束迭代。 remove_if删除所有m_vItem.begin范围()m_vItem.end(的元素)和谓词的IsSelected返回true。擦除()函数删除所有从向量中删除的对象。
IsSelected是一元谓词。它需要一个参数(CItem类型的对象),并返回真或假。结论
与它连接的这篇文章和示例项目,将所有的开发者只是把在STL英尺很好的参考。它还将解决一些基本的查询,甚至经验的STL开发。参考文献 - ;赫伯特Schildt(完整 参考C)

回答

评论会员:hiteshmaheta 时间:2011/12/07
嘿,真的很好,内容丰富的文章

H Maheta
评论会员:托德史密斯 时间:2011/12/07
名单 - 一个线性列表。 -

我相信的std::list的是一个双链表。

托德史密斯