c++笔记 容器 stack、queue、list

一、stack容器 栈容器

先进后出的数据结构。

push入栈、pop出栈、top永远指向栈顶元素

stack没有迭代器

 

void test()
{
	 /*
	 stack构造函数
	 stack<T> stkT;//stack采用模板类实现, stack对象的默认构造形式:
	 stack(const stack &stk);//拷贝构造函数
	 stack赋值操作
	 stack& operator=(const stack &stk);//重载等号操作符
	 stack数据存取操作
	 push(elem);//向栈顶添加元素
	 pop();//从栈顶移除第一个元素
	 top();//返回栈顶元素
	 stack大小操作
	 empty();//判断堆栈是否为空
	 size();//返回堆栈的大小
	 */

	 stack<int> s;
	 s.push(10);
	 s.push(20);
	 s.push(30);
	 s.push(40);
	 if (s.empty())
	 {
		cout << "栈容器为空" << endl;
	 }
	 else
	 {
		cout << "栈容器非空" << endl;
		cout << "size = " << s.size() << endl;
	 }
	 
	while (!s.empty())//非空 返回false
	{
	    cout << s.top() << endl;
	    //出栈
		s.pop();
	}
	
}

 二、队列容器 queue

队列容器:先进先出 队尾插入数据 对头删除数据

queue容器:没有迭代器 不具备遍历功能 只能通过front、back访问

 

 

void test02()
{
	/*
	queue构造函数
	queue<T> queT;//queue采用模板类实现,queue对象的默认构造形式:
	queue(const queue &que);//拷贝构造函数
	queue存取、插入和删除操作
	push(elem);//往队尾添加元素
	pop();//从队头移除第一个元素
	back();//返回最后一个元素
	front();//返回第一个元素
	queue赋值操作
	queue& operator=(const queue &que);//重载等号操作符
	queue大小操作
	empty();//判断队列是否为空
	size();//返回队列的大小
	*/
	queue<int> q;
	q.push(10);
	q.push(20);
	q.push(30);
	q.push(40);
	
	if (q.empty())
	{
		cout << "容器为空" << endl;
	}
	else
	{
	    cout << "容器非空" << endl;
		cout << "size = " << q.size() << endl;
		cout << "对头元素 = " << q.front() << endl;//10
		cout << "队尾元素 = " << q.back() << endl;//40
	}
	
	 cout << "遍历队列" << endl;
	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();//出队
	}

}

三、【list容器】链表容器

 

 list容器(双向链表)的迭代器 必须具备前移、后移 提供的是双向迭代器

vector 单端动态数组(随机访问迭代器)

deque:双端动态数组(随机访问迭代器)

stack:栈容器(没有迭代器)

queue:队列容器(没有迭代器)

list:链表容器(双向迭代器)

void test03()
{
	/*
	list构造函数
	list<T> lstT;//list采用采用模板类实现,对象的默认构造形式:
	list(beg,end);//构造函数将[beg, end)区间中的元素拷贝给本身。
	list(n,elem);//构造函数将n个elem拷贝给本身。
	list(const list &lst);//拷贝构造函数。
	list数据元素插入和删除操作
	push_back(elem);//在容器尾部加入一个元素
	pop_back();//删除容器中最后一个元素
	push_front(elem);//在容器开头插入一个元素
	pop_front();//从容器开头移除第一个元素
	insert(pos,elem);//在pos位置插elem元素的拷贝,返回新数据的位置。
	insert(pos,n,elem);//在pos位置插入n个elem数据,无返回值。
	insert(pos,beg,end);//在pos位置插入[beg,end)区间的数据,无返回值。
	clear();//移除容器的所有数据
	erase(beg,end);//删除[beg,end)区间的数据,返回下一个数据的位置。
	erase(pos);//删除pos位置的数据,返回下一个数据的位置。
	remove(elem);//删除容器中所有与elem值匹配的元素。
	list大小操作
	size();//返回容器中元素的个数
	empty();//判断容器是否为空
	resize(num);//重新指定容器的长度为num,
	若容器变长,则以默认值填充新位置。
	如果容器变短,则末尾超出容器长度的元素被删除。
	resize(num, elem);//重新指定容器的长度为num,
	若容器变长,则以elem值填充新位置。
	如果容器变短,则末尾超出容器长度的元素被删除。
	list赋值操作
	assign(beg, end);//将[beg, end)区间中的数据拷贝赋值给本身。
	assign(n, elem);//将n个elem拷贝赋值给本身。
	list& operator=(const list &lst);//重载等号操作符
	swap(lst);//将lst与本身的元素互换。
	list数据的存取
	front();//返回第一个元素。
	back();//返回最后一个元素。
	list反转排序
	reverse();//反转链表,比如lst包含1,3,5元素,运行此方法后,lst就包含5,3,1元
	素。
	sort(); //list排序
	*/
	list<int> L;
	L.push_back(10);
	L.push_back(20);
	L.push_back(30);
    L.push_back(40);
	printListInt(L);//10 20 30 40
	//迭代器+n 只有随机访问迭代器支持
	//而list容器的迭代器是双向迭代器 不支持+n
	//L.insert(L.begin()+2, 3, 100);//err
	list<int>::iterator it = L.begin();
	//++ 随机访问迭代器 以及 双向迭代器 都支持
    it++;
	it++;
	L.insert(it, 3, 100);
	printListInt(L);//10 20 100 100 100 30 40
	//remove(elem);//删除容器中所有与elem值匹配的元素
	L.remove(100);//删除所有100
	printListInt(L);//10 20 30 40
	//链表反转
	L.reverse();
	printListInt(L);//40 30 20 10\
	//sort是系统提供的算法 仅支持 随机访问迭代器(不支持list)
    //list容器不能使用系统算法 list会自己提供算法
	//sort(L.begin(),L.end());
	L.sort();
	printListInt(L);//10 20 30 40
	
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值