————————————————————————————————————————————
c++中关于容器的一些用法:
顺序容器,表示数据可以顺序的访问,不依赖于数据存放的位置,而依赖于数据加入容器的顺序。
主要有:
1.vector
2.string
3.list
4.queue
5.priority_queue
6.stack
关联容器:按照关键字的顺序来保存,访问也是按照关键字进行的。
主要有:
1.map
2.set
3.mutlimap
4.mutliset ——注意这里的数据是顺序排放的
5.unordermap
6.unordermutlimap
7.unorderset
8.unordermutliset
————————————————————————————————————————————
STL之四:list用法详解
https://blog.csdn.net/sunxueping/article/details/51170890
1. list功能
list是双向循环链表,每一个元素都知道前面一个元素和后面一个元素.list对象自身提供了两个pointer用来指向第一个和最后一个元素.每个元素都有pointer指向前一个和后一个元素.如果想要插入新元素,只需要操纵对应的pointer即可.因此list在几个方面与array,vector不同:
-
list不支持随机访问,如果你要访问第5个元素,就得顺着串链逐一爬过前4个元素.所以在list中随机访问一个元素是很缓慢的,然而你可以从两端开始航行整个list,所以访问第一个或最后一个元素速度很快.
-
任何位置上(不只两端)执行元素的插入或删除都非常快,因为无需移动任何其他元素.实际上内部只是进行了一些pointer操作而已.
-
==插入和删除动作并不会造成其他元素的各个pointer,reference和iterator失效. ==
-
list对于异常的处理方式是:要么操作成功,要么什么都不发生,绝对不会陷入”只成功一半”这种进退维谷的境地.
list所提供的成员函数反映出它与array,vector不同:
- list提供front(),push_front()和pop_front(),back(),push_back()和pop_back()等操作函数.
- 由于==不支持随机访问,list既不提供下表操作符,也不提供at(). ==
- list并未提供容量,空间重新分配等操作函数,因为完全无必要.每个元素都有自己的内存,在这个元素删除前一直有效.
2.list的创建插入与遍历
3.list的访问
4.list的删除
5.list的插入
6.list反转,排序
7.list的去重
8.list的注意事项
常用的删除容器中元素的方法是如下(方法1):
list< int> List;
list< int>::iterator iter;
for( iter = List.begin(); iter != List.end(); )
{
if(1)
{
iter = List.erase( iter );
}
else
{
iter++;
}
}
注意:函数在返回的时候,是返回当前迭代器的下一个节点。所以当 iter = List.erase( iter ); 执行以后,迭代器自动指向了下一个元素。而对于入参中的iter,所指的地址已经被销毁,所以写的时候,应该注意加上前面的iter =
————————————————————————————————————————————
C++ 学习笔记之 STL 队列
https://www.cnblogs.com/Wade-/p/6498360.html
在算法以及数据结构的实现中,很多地方我们都需要队列(遵循FIFO,先进先出原则)。为了使用队列,我们可以自己用数组来实现队列,但自己写太麻烦不说,并且还很容易出错 好在C++的STL(标准模板库)为我们实现了一个强大的队列,它包含在头文件中
1.队列的构造
我们可以使用deque(双端队列容器)或者list(链表容器)来作为queue的基础容器(underlying container,即队列是在基础容器的基础上实现的),其中deque是默认使用的,如果没有在参数中特殊指定,那么queue就使用deque作为基础容器
双端队列deque是最容易的使用的队列。下面对这个队列进行说明:
————————————————————————————————————————————