C++笔记 17 (STL常用容器 - stack & queue & list)

三. STL常用容器

5. stack容器

5.1 stack基本概念

stack是一种先进后出的数据结构,它只有一个出口。

栈中只有顶端的元素才可以被外界使用,因此栈不允许有遍历行为

栈不支持迭代器

5.2 stack常用接口
stack<int>s; //默认构造
s.push(10); //向栈顶添加元素,叫做压栈、入栈
s.pop(); //弹出栈顶元素
s.top(); //返回栈顶
s.empty(); //判断栈是否为空
s.size();  //返回栈的大小

6. queue容器

6.1 queue基本概念

queue是一种先进先出的数据结构,它有两个出口

队列容器允许从一端新增元素,从另一端移除元素

队列中只有队头和队尾才可以被外界使用,因此队列不允许有遍历行为

6.2 queue常用接口
queue<Person>q; //创建队列
q.push(p1);   //向队列中添加元素,入队操作,往队尾添加

//队列不提供迭代器,更不支持随机访问

q.pop(); //从队头移除第一个元素
q.back(); //返回最后一个元素
q.front(); //返回第一个元素
q.empty(); //判断队列是否为空
q.size(); //返回队列大小

7. list容器

7.1 list基本概念

功能:将数据进行链式存储
链表的组成:链表由一系列结点组成,结点由存储数据元素的数据域存储下一个结点地址的指针域组成。

STL中的链表是一个双向循环链表

由于链表的存储方式并不是连续的内存空间,因此链表list中的迭代器只支持前移和后移,属于双向迭代器

list的优点:
1)采用动态存储分配,不会造成内存浪费和溢出;
2)执行插入和删除操作十分方便,修改指针即可,不需要移动大量元素。

list的缺点:
1)链表灵活,但是空间(指针域)和时间(遍历)额外耗费较大

list的插入操作和删除操作都并不会造成原有list迭代器的失效,这在vector是不成立的。

总结:STL中list和vector是两个最常被使用的容器,各有优缺点

7.2 list构造函数
list<int>l1;
list<int>l2(l1.begin(),l1.end());
list<int>l3(l2);
list<int>l4(10,1000);
7.3 list赋值和交换
l2=l1;
l3.assign(l2.begin(),l2.end());
l4.assign(10,100);
l1.swap(l2);  //交换
7.4 list大小和操作
l.size();   //返回容器中元素的个数
l.empty();  //判断是否为空

l.resize(num);  //重新指定个数
l.resize(num,elem);
7.5 list插入和删除
l.push_back(10); //尾插
l.push_front(100); //头插
l.pop_back();   //尾删
l.pop_front();  //头删
l.insert(d.begin(),100); //返回新数据位置

list<int>::iterator it = l.begin();
l.insert(++it,1000);

it = l.begin();
l.erase(++it);

l.remove(100000);  //移除容器中值为100000的数据

l.clear();  //清空
7.6 list数据存取

不支持at访问数据,不支持 [ ] 方式访问数据

list<int>::iterator it = l1.begin();

/*it = it+1;  错误,list容器的迭代器是双向迭代器,
				不支持随机访问,不可以跳跃访问,即使是+1*/
7.7 list反转和排序
l.reverse();   //反转容器的元素

l.sort();  //排序,默认从小到大

bool myCompare(int val1, int val2)
{
	return val1 > val2;
}
l.sort(myCompare); //从大到小排序
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值