C++顺序容器

1.什么是容器

容器,顾名思义,装东西的东西。对于我们程序设计来讲,如何将一系列的信息存储到计算机里是我们应该经常思考的事情,我们可以用到一些数据结构:数组,用线性表,用队列,用树与图,而C++的stl库中就这样给我们创建了这一些的容器(数据结构+方法),我们可以使用容器特定的方法进行数据的访问与写入。

2.基本容器

2.1 vector

vector类似于数组,可以进行下标访问。
实例,现阶段用到:初始化、遍历、插入和删除。

函数作用
vec.begin();返回首元素地址
vec.end();返回尾元素地址的下一个地址
vec.push_back(value);向后插入value
vec.pop_back();出栈/删除末尾元素
vec.empty();bool类型,容器为空为真
vec.size();返回容器长度
vec.insert();插入,基于迭代器位置
vec.erase();删除,基于迭代器位置,删除元素和迭代器
#include <iostream>
#include <vector>
using namespace std;

int main()
{
	int a[5] = {1,2,3,4,5};
	vector<int> x;
	//初始化
	vector<int> y(a,a+5);
	x.push_back(10);
	x.push_back(20);
	x.push_back(30);
	x.push_back(40);
	//遍历方法1:迭代器
	vector<int> :: iterator it ;
	for(it = x.begin();it != x.end();it++)
		cout << *it <<endl;
	//遍历方法2:
	vector<int> :: size_type i;
	for (i = 0 ; i < x.size();i++)
		cout << x[i] <<endl;
	//插入:
	it = x.begin();
	x.insert(it,22);
	x.insert(x.end(),33);
	x.insert(x.end(),y.begin(),y.end());
	for (i = 0 ; i < x.size();i++)
		cout << x[i] <<endl;
	cout << endl;
	//删除
	it = x.begin();
	x.erase(it);
	//x.erase(++it);
	x.erase(x.begin(),--x.end());
	for (i = 0 ; i < x.size();i++)
		cout << x[i] <<endl;
	

	return 0;
}

2.2 deque

deque是stl标准库中基本容器:双向队列;
deque的操作:
d.push_back(value);
d.push_front(value);
d.pop_front(value);
d.pop_back(value);

2.3 list

list操作总结:
前插:list.push_front(int);
后插:list.push_back(int);
插入:list.insert(迭代器,int);
    list.insert(a.begin(),b.begin(),b.end())将b插入a
    list.insert(迭代器,4,20)将420插入迭代器位置
删除:list.erase(迭代器);
    list.erase(a.begin(),a.end());
排序:list.sort();
反转:list.reverse();
1.插入操作
#include <iostream>
#include <list>
 
using namespace std;
void print(const list<int>& listput);
int main()
{
	list<int> a,b;
	b.push_back(100);
	b.push_back(200);
	b.push_back(300);
	b.push_back(400);
	b.push_back(500);
	a.push_front(4);
	a.push_front(3);
	a.push_front(2);
	a.push_front(1);
	a.push_back(5);
//插入list操作
	a.insert(a.begin(),10);
	a.insert(a.end(),4,20);        
	a.insert(a.begin(),b.begin(),b.end()); //迭代器位置可以自行变化
	print(a);
	print(b);
 
return 0;
}
void print(const list<int>& listput)
{
//const_iterator 遍历的时候用到,不能修改值了
	list<int>::const_iterator iter;
	for (iter = listput.begin();iter != listput.end();iter++)
	{
		cout << *iter <<endl;
	}
}
2.删除操作
#include <iostream>
#include <list>
 
using namespace std;
void print(const list<int>& listput);
int main()
{
	std::list<int> a;
	a.push_front(4);
	a.push_front(3);
	list<int>::iterator it; 
	it = a.insert(a.begin(),2);
	a.push_front(1);
	a.push_front(0);
	a.erase(it);
	a.erase(++a.begin(),a.end());
//从哪里到哪里,end指向的是尾元素的下一个元素
	print(a);
	return 0;
}
void print(const list<int>& listput)
{
	list<int>::const_iterator iter;
	for (iter = listput.begin();iter != listput.end();iter++)
	{
		cout << *iter <<endl;
	}
}
3.反转和排序
#include <iostream>
#include <list>
 
using namespace std;
 
void print(const list<int>& listput);
int main()
{
	std::list<int> a;
	a.push_front(2);
	a.push_front(56);
	a.push_front(1);
	a.push_front(33);
	a.push_front(15);
	print(a);
	a.sort();
//排序
	a.reverse();                
//翻转
	cout <<endl;
	print(a);
	return 0;
}
void print(const list<int>& listput)
{
	list<int>::const_iterator iter;
	for (iter = listput.begin();iter != listput.end();iter++)
	{
		cout << *iter <<endl;
	}
}

3.自适应容器

3.1 queue

3.2 stack

//stack相当于一个容器适配器,不是独立的容器
stack<int,deque<int>> a;         //用数组
stack<int,vector<int>> b;        //用容器
stack<int,list<int>> c;          //用链表
stack<int> d;             		 //默认deque作堆栈
操作:
s.empty():            检测是否为空
s.size():             堆栈大小
s.pop():              出栈(不返回,只删除)
s.top():              栈顶值(查看,不删除)
s.push(value):        压栈
 
#include <iostream>
#include <stack>
#include <vector>
#include <list>
#include <algorithm>
 
using namespace std;
//stack相当于一个容器适配器,不是独立的容器
int main()
{
	stack<int,deque<int>> a;        //用数组
	stack<int,vector<int>> b;        //用容器
	stack<int,list<int>> c;                //用链表
	stack<int> d;//默认deque作堆栈
	d.push(25);
	d.push(10);
	d.push(1);
	d.push(5);
 
	cout << "现在栈里有"<<d.size()<<"个数据"<<endl;
	int x = d.top(); 
	d.pop();
	cout << x <<endl;
 
	cout << "现在栈里有"<<d.size()<<"个数据"<<endl;
	 x = d.top(); 
	d.pop();
	cout << x <<endl;
 
	cout << "现在栈里有"<<d.size()<<"个数据"<<endl;
 
//while(d.size() != 0)
	while(d.empty() == false)//如果不为空
	{
		int x = d.top(); 
		d.pop();
		cout << x <<endl;
	} 
	return 0;
}

3.3 priority_queue

在这里插入图片描述

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>
 
using namespace std;
 
int main()
{
	priority_queue<int,vector<int>> pq;//默认(最大值优先级队列)
	priority_queue<int,deque<int>,greater<int>> pq2;
	//加入谓词greater变为最小值优先级队列
	pq.push(10);
	pq.push(20);
	pq.push(5);
	pq.push(30);
	cout <<"优先级队列一共有"<<pq.size()<<"个数据"<<endl;
	cout << pq.top()<<endl;
	while(!pq.empty())
	{
		cout <<"从优先级队列里删除"<<pq.top()<<endl;
		pq.pop();
	}
 
	pq2.push(10);
	pq2.push(20);
	pq2.push(-1);
	pq2.push(30);
	cout << pq2.top()<<endl;
	while(!pq2.empty())
	{
		cout << pq2.top()<<endl;
		pq2.pop();
	}
	return 0;
}


在这里插入图片描述

4.迭代器的操作

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值