设为首页 加入收藏

TOP

G.2 大部分容器都有的成员(1)
2013-10-07 15:49:30 来源: 作者: 【 】 浏览:67
Tags:G.2 大部分 容器 有的 成员

G.2  大部分容器都有的成员(1)

所有容器都定义了表G.1列出的类型。在这个表中,x为容器类型,如vector<int>;T为存储在容器中的类型,如int。表G.1中的示例阐明了含义

表G.1为所有容器定义的类型

   < xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

x::value-type

T,元素类型

x::reference

T &

x::const_reference

const T &

x::iterator

指向T的迭代器类型,行为与T*相似

x::const_iterator

指向const T的迭代器类型,行为与const T *相似

x::different_type

用于表示两个迭代器之间距离的符号

整型,如两个指针的差

x::size_type

无符号整型size_type可以表示数据对

象的长度、元素数目和下标

类定义使用typedef定义这些成员。可以使用这些类型来声明适当的变量。例如,下面的代码使用迂回的方式,将由string对象组成的矢量中的第一个"bonus"替换为"bogus",以演示如何使用成员类型来声明变量。

 
上述代码使r成为一个指向(want指向的)input中元素的引用。同样,继续前面的例子,可以编写下面这样的代码:
 
这将导致s1为一个新string对象,它是input[0]的拷贝;而s2为指向input[1]的引用。在这个例子中,由于已经知道模板是基于string类型的,因此编写下面的等效代码将更简单:
 
然而,还可以在更通用的代码中使用表G.1中较精致(其中容器和元素的类型是通用的)的类型。例如,假设希望min( )函数将一个指向容器的引用作为参数,并返回容器中最小的项目。这假设为用于实例化模板的值类型定义了<运算符,而不想使用STL min_element( )算法,这种算法使用迭代器接口。由于参数可能是vector<int>、list<strint>或deque<double>,因此需要使用带模板参数(如Bag)的模板来表示容器(也就是说,Bag是一个模板类型,可能被实例化为vector<int>、list<string>或其他一些容器类型)。因此,函数的参数类型应为const Bag & b。返回类型是什么呢?应为容器的值类型,即Bag::value_type。然而,在这种情况下,Bag只是一个模板参数,编译器无法知道value_type成员实际上是一种类型。但可以使用typename关键字来指出,类成员是typedef:
 
对于上述第一个定义,编译器能够访问vector模板定义,该定义指出,value_type是一个typedef;对于第二个定义,typename关键字指出,无论Bag将会是什么,Bag::value-type都将是类型的名称。这些考虑因素导致了下面的定义:
 
这样,便可以这样使用该模板函数:
 

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇G.2 大部分容器都有的成员(2) 下一篇G.5.1 非修改式序列操作(2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·常用meta整理 | 菜鸟 (2025-12-25 01:21:52)
·SQL HAVING 子句:深 (2025-12-25 01:21:47)
·SQL CREATE INDEX 语 (2025-12-25 01:21:45)
·Shell 传递参数 (2025-12-25 00:50:45)
·Linux echo 命令 - (2025-12-25 00:50:43)