科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件标准C程式库--标准样版库-串列样版

标准C程式库--标准样版库-串列样版

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

此标准化程序便是标准资料结构库的产生,此程式库通常称为「标准样版库」( Standard Template Library ) 或 STL 。

来源:中国软件网 2008年3月31日

关键字: 样版 标准 C++ C Linux

  • 评论
  • 分享微博
  • 分享邮件

过去几年以来,C++ 程式语言的标准语言定义程序经历了一个大改变。此标准化程序便是标准资料结构库的产生,此程式库通常称为「标准样版库」( Standard Template Library ) 或 STL 。由於 STL 是 C++ 语言定义的一部份,因此使用 STL 的程式应该享有高度可植性,因为任何标榜支援 " 标准C++" 的编译程式都必须提供 STL 实作。

叠代字只是一种类似指标的物件,可以用来循环存取容器中的所有元素。由於不同的演算法需要以个种不同的方式来游历容器,因此有各种不同的叠代子形式。标准样版库中的每个容器类都提供一种叠代子,适合和实作容器所用的储存技巧配合使用。

在执行过程中,如果一个问题中的元素个数变化非常大,或者无法事先预估元素个数,则不适合采用向量资料型态。在这种情况下,连结串列资料抽象是比较恰当的选择。连结串列的观念是一种很自然的资料抽象,导源於一个问题中的资料结构必须维护一个群集,而群集中的元素个数无法事先预知,或者可能剧烈变化。基本上,连结串列的观念是维护一个串连起来的集合,其串每个动态配置的链都储存一个值与一个指向下一链的指标。如果链不是串列最後一个储专资讯的容器,最简单的形式只储存指向第一个链的指标。

 

串列有许多型式,大略可分为四种:第一、基本型式,拥有 (1) 链结。第二、可同时储取第一个链和最後一个链,(1)和(3)链结。第三、可以双向游历串列,(1) 和 (2) 链结。第四、包含第二和第三类型,(1)、 (2) 和 (3) 链结。

当我们使用 list 串列时,必须含入 #include :

叠代子
begin    传回一个指向起点的叠代子。

end    传回一个指向终点的叠代子。

rbegin    传回一个指向反转起点的叠代子。

rend    传回一个指向反转终点的叠代子。

Top

宣告及初始化串列
列串和向量一样,是用样版实作出来的。当作样版的型态可用标准资料型态或自订资料型态,但自订资料型态必须设定一个无参数建构子来初始化型态值。另外使用拷贝建构子时,样版会使用此型态的指派运算子 ( = ) 。因此,指派运算子是否要定义可由使用者决定。

list < int > list_one ;    

list < float > list_two ( 4 , 3.2 );        file://配置4个元素,初值为 3.2

list < double > list_six ( list_two );        file://拷贝建构子

下列几个成员函式可以将串列中的元素做全面或局部的调整。

insert    将元素插入串列中间。它有两个引数分别为一个叠代子和一个值,此值会插入叠代子的位置前面。例: list_six.insert ( list_six.begin( ) , 1.34 );

assign    类似於指派运算子的函式,但比指派运算子在运用上围更大,需要较多的参数。但是会删除所有的元素。例:list_five.assign(12);        file://将串列长度为 12 初值为 0 

swap    交换两串列的元素。

Top

将元素放入串列
push_back    将元素从後端推入串列。

push_front    将元素从前端推入串列,例:list_seven.push_front(1.2);

Top

连接两串列
splice    有一点类似 insert 的功能,但原串列的内容会被删除。因为 splice 是将原串列的内容链,直接改成插入的地方,所以资料的位置没有被改变。只是链结的位置改变而已,效率比 insert 快上许多。

merge    合两个有序串列,此成员函式比通用演算法来得有效率,但前提是串列必须已经排序完成。

Top

删除串列
pop_back    传回最後一个元素,并将它从串列中删除。

pop_front    传回最前面一个元素,并将它从串列中删除。

remove    删除串列中某一个值的元素。例:list_nine.remove(4);        file://删除串列中所有资料是 4 的元素

remove_if    删除满足某一条件的所有值。它和 remove  函式比通用演算法更有效率。例:list_nine.remove_if(divisibleByThree);

erase    删除两个叠代子中间的元素。可以只指定一个叠代子,其功能为删除此叠代子到最後一个的元素。

unique    移除所有相邻种元素,只保留第一个元素。使用者可以利用可有可无的二元函式来取代相等比较运算子。例:list_nine.unique();

clear    删除所有的元素。

Top

长度和大小的改变
empty    检查元素个数是否为零个。

resize    可改变串列长度,加长或减少。加果加长的话,可以设定初值。

size    传回容器中所储存元素的个数。

Top

存取元素和叠代子
front    传回容器中第一个元素。

back    传回容器中最後一个元素。

Top

排序
sort    将元素编排成递增顺序,它所采用的是一个有效率的演算法。如果比较运算子不是< ,可以当成引数传入函式中。例:list_twelve.sort (widgetCompare);

Top

其它
max_size    可建立元素的最大个数。

reverse    将串列中每一个元素反转。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章