queue容器
先进先出
队列容器允许从一端新增元素,从另一端移除元素
队列中只有队头和队尾才可以被外界使用,因此不允许有遍历行为,如果一定要访问对内的某个元素,只能将其前面的元素全部从队中删除,使之成为队头才可以
入队操作只在队尾进行,出队操作只在队头进行
list容器
list实现为一个双向链表,他不能实现随机访问,但可以高效地在任意位置插入和删除元素。(当在列表中插入一个元素时,不需要移动任何元素,只需要创建一个新的链表节点并修改前后两个节点的指针。当删除元素时,需要释放被删除节点所占用的空间,然后修改前后两个节点的指针,不需要移动任何元素。)所以list中插入和删除元素效率很高。并且,链表采用
缺点:容器遍历速度没有数组快,占用的空间比数组大(链表数据int占4个,指针占4个。数组,数据int占四个)
list赋值和交换
//赋值
list<int>l1;
void printList(const list<int>&L)
{for(list<int>::const_iterator it=L.begin();it!=L.end();it++)
{
cout<<*it;
}
}
l1.push_back(10);
l1.push_back(20);
l1.push_back(30);
l1.push_back(40);
printList(l1)//10,20,30,40
list<int>l2;
l2=l1;
list<int>l3;
l3.assig(l2.begin(),l2.end());
list<int>l4;
l4.assign(10,100);
//交换
list<int>l5;
l5.assign(10,100);
l1.swap(l2);
list大小操作
size()//返回容器中元素个数
empty()//判断容器是否为空
resize(num)//重新指定容器的长度为num,若容器变长,则以默认值填充新位置,如果容器变短,则末尾超出容器长度的元素被删除
list不可以用at,[]进行访问,原因:list本质是链表,不是用连续线性空间存储数据,迭代器也不支持随机访问
list反转和排序操作
反转:
List<int>l1;
l1.reverse();
//所有不支持随机访问迭代器的容器,不可以用标准算法
//不支持随机访问迭代器的容器内部会提供对应一些算法
l1.sort();//默认排序从小到大
bool mycompare(int v1,int v2)
{
//降序,让第一个数大于第二个数
return v1>v2;
}
l1.sort(mycompare)