栈容器——stack容器
规则:先进后出
特点:
栈不能遍历,不支持随机存储,不提供迭代器,只能通过top从栈顶获取和删除元素
要想访问栈底元素,只能不断出栈,没有at与[ ]
队列容器——queue
规则:先进先出
特点:
一端插入,另一端删除
不能进行遍历,不提供迭代器,不支持随机访问
队列与栈的实例
queue<stack<int>> v;
stack<int> s1;
s1.push(1);
s1.push(2);
s1.push(3);
stack<int> s2;
s2.push(4);
s2.push(5);
s2.push(6);
v.push(s1);
v.push(s2);
while (!v.empty()){
while (!v.front().empty()){
cout << v.front().top() << " ";
v.front().pop();
}
v.pop();
}
链表容器——list
特点:
双向链表,在任何位置插入和删除效率都比较好,相对于数组来说,不需要移动元素。不支持随机访问,在保存数据的同时,需要保存节点和节点之间的关系,所以需要额外的空间开销。可以使用迭代器遍历,因为非连续空间,访问下一个节点只能使用++运算符,不能+=。自己提供了sort()方法,不能使用算法提供的sort,因为不支持随机访问。
//插入和删除
list<int> list1;
list1.push_back(100);
list1.push_front(200);
list1.insert(list1.begin(), 300);
list1.insert(list1.begin(), 200);
list1.insert(list1.end(), 400);
list1.insert(list1.end(), 200);
list<int>::iterator it = list1.begin();
it++;
it++;
//排序
/*
list自带的排序
算法sort,支持可随机访问的容器
*/
bool mycompare(int v1,int v2)
{
return v1 > v2;
}
list<int> mlist;
mlist.push_back(5);
mlist.push_back(21);
mlist.push_back(33);
mlist.push_back(9);
mlist.push_back(1);
for (list<int>::iterator it = mlist.begin(); it != mlist.end(); it++)
{
cout << *it << " ";
}
cout << endl;
mlist.sort(); //从小到大
for (list<int>::iterator it = mlist.begin(); it != mlist.end(); it++)
{
cout << *it << " ";
}
cout << endl;
mlist.sort(mycompare); //从大到小
for (list<int>::iterator it = mlist.begin(); it != mlist.end(); it++)
{
cout << *it << " ";
}
cout << endl;