码迷,mamicode.com
首页 > 编程语言 > 详细

C++标准模板库_note(2)

时间:2016-05-13 00:21:03      阅读:134      评论:0      收藏:0      [点我收藏+]

标签:

List(双向链表)

无需指定预先分配内存大小就可以动态扩展,原因是存储在不连续的内存空间,由指针将其链接起来。

因为是链表所以随机访问的性能不好,但是在任何位置插入删除的性能比vector好(链表的特性)

特点:

  • 存储地址不连续,动态扩展性能好
  • 在任何位置插入删除性能好
  • 不支持随机访问

加粗的和vector一样
assign()
back()
clear()
empty()
end()
erase()
front()
get_allocator()
insert()
max_size()
merge()合并两个list

//自己和lst合并并排序
merge(list &lst);
//按照某种规则排序
merge(list &lst, Comp compfunction );

pop_back()
pop_front() 删除第一个元素
push_back()
push_front() 在list的头部添加一个元素
rbegin()
remove() 从list删除元素

//删除链表中所有值为val的元素
void remove( const TYPE &val );

remove_if() 按指定条件删除元素
rend()
resize() 改变list的大小

//把list的大小改变到num。被加入的多余的元素都被赋值为val
void resize( size_type num, TYPE val );

reverse()
size()
sort() 给list排序

void sort();//为链表排序,默认是升序
void sort( Comp compfunction );//采用指定函数compfunction来判定两个元素的大小。

splice() 合并两个list

void splice( iterator pos, list &lst );//把lst连接到pos的位置
void splice( iterator pos, list &lst, iterator del );//插入lst中del所指元素到现链表的pos上
void splice( iterator pos, list &lst, iterator start, iterator end );//用start和end指定范围。

swap()
unique() 删除list中重复的元素

void unique();//删除链表中所有重复的元素
void unique( BinPred pr );// 指定pr,则使用pr来判定是否删除。 

Deque( 双向队列)

在序列两端添加和删除元素的基本序列容器。
用多个连续内存空间存储数据。
结合了list和vector的特点,处在两者的平衡。

特点:

  • 支持随机访问,但是性能没有vector好
  • 可以在内部任意位置插入删除,但是性能没有list好
  • 两端push,pop
  • 相比vector占用更多内存。(指针的关系?list也应该是这样?

Constructors 创建一个新双向队列

deque();//创建一个空双向队列
deque( size_type size );// 创建一个大小为size的双向队列
deque( size_type num, const TYPE &val ); //放置num个val的拷贝到队列中
deque( const deque &from );// 从from创建一个内容一样的双向队列
deque( input_iterator start, input_iterator end );
// start 和 end - 创建一个队列,保存从start到end的元素。

Operators 比较和赋值双向队列
可以使用[]操作符访问双向队列中单个的元素
assign() 设置双向队列的值

//start和end指示的范围为双向队列赋值
void assign( input_iterator start, input_iterator end); 
void assign( Size num, const TYPE &val );//设置成num个val。

at() 返回指定的元素

reference at( size_type pos ); 返回一个引用,指向双向队列中位置pos上的元素

back() 返回最后一个元素

reference back();//返回一个引用,指向双向队列中最后一个元素

begin() 返回指向第一个元素的迭代器

iterator begin();//返回一个迭代器,指向双向队列的第一个元素

clear() 删除所有元素
empty() 返回真如果双向队列为空
end() 返回指向尾部的迭代器
erase() 删除一个元素

iterator erase( iterator pos ); //删除pos位置上的元素
iterator erase( iterator start, iterator end ); //删除start和end之间的所有元素
//返回指向被删除元素的后一个元素

front() 返回第一个元素的引用
get_allocator() 返回双向队列的配置器
insert() 插入一个元素到双向队列中

iterator insert( iterator pos, size_type num, const TYPE &val ); //pos前插入num个val值
void insert( iterator pos, input_iterator start, input_iterator end );//插入从start到end范围内的元素到pos前面

max_size() 返回双向队列能容纳的最大元素个数
pop_back() 删除尾部的元素
pop_front() 删除头部的元素
push_back() 在尾部加入一个元素
push_front() 在头部加入一个元素
rbegin() 返回指向尾部的逆向迭代器
rend() 返回指向头部的逆向迭代器
resize() 改变双向队列的大小
size() 返回双向队列中元素的个数
swap() 和另一个双向队列交换元素

void swap( deque &target );// 交换target和现双向队列中元素

三者比较

vector 是一段连续的内存块,而deque 是多个连续的内存块, list 是所有数据元素分开保存,可以是任何两个元素没有连续。
vector 的查询性能最好,并且在末端增加数据也很好,除非它重新申请内存段;适合高效地随机存储。
list 是一个链表,任何一个元素都可以是不连续的,但它都有两个指向上一元素和下一元素的指针。所以它对插入、删除元素性能是最好的,而查询性能非常差;适合大量地插入和删除操作而不关心随机存取的需求。
deque 是介于两者之间,它兼顾了数组和链表的优点,它是分块的链表和多个数组的联合。所以它有list好的查询性能,有vector好的插入、删除性能。
如果你需要随即存取又关心两端数据的插入和删除,那么deque是最佳之选。

C++标准模板库_note(2)

标签:

原文地址:http://blog.csdn.net/gr47725812/article/details/51348241

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!