常用C++容器

list容器

list容器知识

list是一种序列式容器,其完成的功能实际上和数据结构中的双向链表很相似,具备链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。

常用序列式容器

vector:和数组类似,拥有一段连续的内存空间,能非常好的支持随机存取,即[]操作符,但由于是连续的内存空间,在中间的插入和删除会导致内存块的拷贝。

list:双向链表,内存空间不连续的,通过指针访问数据。

deque:支持[]操作符,也支持随机存取。(不常用,也不常见)

三者比较:

  1. 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
  2. 如果你需要大量的插入和删除,而不关心随即存取,则应使用list
  3. 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque

list常用函数

  • begin()end():通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator,可以调用list容器的 end() 函数来得到list末端下一位置,相当于:int a[n]中的第n+1个位置a[n],实际上是不存在的,不能访问,经常作为循环结束判断结束条件使用。
  • push_back()push_front():使用list的成员函数push_backpush_front插入一个元素到list中。其中push_back()list的末端插入,而 push_front()实现的从list的头部插入。
  • empty():利用empty() 判断list是否为空。
  • resize():将list长度改为只容纳n个元素,超出的元素将被删除。
  • clear():清空list中所有元素。
  • front()back():通过front()可以获得list容器中的头部元素,通过back()可以获得list容器的最后一个元素。但是有一点要注意,就是list中元素是空的时候,这时候调用front()back()会发生什么呢?实际上会发生不能正常读取数据的情况,但是这并不报错,那我们编程序时就要注意了,个人觉得在使用之前最好先调用empty()函数判断list是否为空。
  • pop_back()pop_front():通过pop_back()删除最后一个元素,通过pop_front()删除第一个元素。序列必须不为空,如果当list为空的时候调用pop_back()pop_front()会使程序崩掉。
  • assign():具体和vector中的操作类似,也是有两种情况,第一种是:l1.assign(n,val)l1中元素变为nT(val)。第二种是:l1.assign(l2.begin(),l2.end())l2中的从l2.begin()l2.end()之间的数值赋值给l1
  • swap():交换两个链表(两个重载),一个是l1.swap(l2); 另外一个是swap(l1,l2),都可能完成连个链表的交换。
  • reverse():完成list的逆置。
  • merge():合并两个链表并使之默认升序(也可改),l1.merge(l2,greater<int>()); 调用结束后l2变为空,l1中元素包含原来l1l2中的元素,并且排好序,升序。其实默认是升序,greater<int>()可以省略,另外greater<int>()是可以变的,也可以不按升序排列。
  • insert():在指定位置插入一个或多个元素(三个重载):
    1. l1.insert(l1.begin(),100);l1的开始位置插入100
    2. l1.insert(l1.begin(),2,200);l1的开始位置插入2100
    3. l1.insert(l1.begin(),l2.begin(),l2.end());l1的开始位置插入l2的从开始到结束的所有位置的元素。
  • erase():删除一个元素或一个区域的元素(两个重载):
    1. l1.erase(l1.begin());l1的第一个元素删除。
    2. l1.erase(l1.begin(),l1.end());l1的从begin()end()之间的元素删除。

map容器

map映射容器的元素数据是由一个键值和一个映射数据组成的,键值与映照数据之间具有一一映照的关系。map容器的数据结构也采用红黑树来实现的,插入元素的键值不允许重复,比较函数只对元素的键值进行比较,元素的各项数据可通过键值检索出来。

begin() 返回指向 map 头部的迭代器
clear() 删除所有元素
count() 返回指定元素出现的次数
empty() 如果 map 为空则返回 true
end() 返回指向 map 末尾的迭代器
erase() 删除一个元素
find() 查找一个元素
insert() 插入元素
key_comp() 返回比较元素 key 的函数
lower_bound() 返回键值>=给定元素的第一个位置
max_size() 返回可以容纳的最大元素个数
rbegin() 返回一个指向 map 尾部的逆向迭代器
rend() 返回一个指向 map 头部的逆向迭代器
size() 返回 map 中元素的个数
swap() 交换两个 map
upper_bound() 返回键值>给定元素的第一个位置
value_comp() 返回比较元素 value 的函数

vector容器

1.push_back 在数组的最后添加一个数据

2.pop_back 去掉数组的最后一个数据

3.at 得到编号位置的数据

4.begin 得到数组头的指针

5.end 得到数组的最后一个单元+1的指针

6.front 得到数组头的引用

7.back 得到数组的最后一个单元的引用

8.max_size 得到vector最大可以是多大

9.capacity 当前vector分配的大小

10.size 当前使用数据的大小

11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值

12.reserve 改变当前vecotr所分配空间的大小

13.erase 删除指针指向的数据项

14.clear 清空当前的vector

15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1)

16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)

17.empty 判断vector是否为空

18.swap 与另一个vector交换数据
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值