list容器
list容器知识
list是一种序列式容器,其完成的功能实际上和数据结构中的双向链表很相似,具备链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的。list的每个节点有三个域:前驱元素指针域、数据域和后继元素指针域。
常用序列式容器
vector:和数组类似,拥有一段连续的内存空间,能非常好的支持随机存取,即[]操作符,但由于是连续的内存空间,在中间的插入和删除会导致内存块的拷贝。
list:双向链表,内存空间不连续的,通过指针访问数据。
deque:支持[]操作符,也支持随机存取。(不常用,也不常见)
三者比较:
- 如果你需要高效的随即存取,而不在乎插入和删除的效率,使用
vector - 如果你需要大量的插入和删除,而不关心随即存取,则应使用
list - 如果你需要随即存取,而且关心两端数据的插入和删除,则应使用
deque。
list常用函数
begin()和end():通过调用list容器的成员函数begin()得到一个指向容器起始位置的iterator,可以调用list容器的end()函数来得到list末端下一位置,相当于:int a[n]中的第n+1个位置a[n],实际上是不存在的,不能访问,经常作为循环结束判断结束条件使用。push_back()和push_front():使用list的成员函数push_back和push_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中元素变为n个T(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中元素包含原来l1和l2中的元素,并且排好序,升序。其实默认是升序,greater<int>()可以省略,另外greater<int>()是可以变的,也可以不按升序排列。insert():在指定位置插入一个或多个元素(三个重载):l1.insert(l1.begin(),100);在l1的开始位置插入100。l1.insert(l1.begin(),2,200);在l1的开始位置插入2个100。l1.insert(l1.begin(),l2.begin(),l2.end());在l1的开始位置插入l2的从开始到结束的所有位置的元素。
erase():删除一个元素或一个区域的元素(两个重载):l1.erase(l1.begin());将l1的第一个元素删除。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交换数据
C++容器详解
708

被折叠的 条评论
为什么被折叠?



