【STL】C++ stack(栈) 基本使用

目录

[一 stack常见构造](#一 stack常见构造)

[1 空容器构造函数(默认构造函数)](#1 空容器构造函数(默认构造函数))

[2. 使用指定容器构造](#2. 使用指定容器构造)

[3 拷贝构造函数](#3 拷贝构造函数)

[二 其他操作](#二 其他操作)

[1 empty](#1 empty)

[2 size](#2 size)

[3 top](#3 top)

[4 push && pop](#4 push && pop)

[5 emplace](#5 emplace)

[6 swap](#6 swap)

[三 总结](#三 总结)


一 stack常见构造

1 空容器构造函数(默认构造函数)

构造一个没有元素的空容器。

2. 使用指定容器构造

可以使用指定的底层容器来构造栈,默认是 std::deque,但也可以是 std::vector 或 std::list

3 拷贝构造函数

构造一个容器,其中包含 x 中每个元素的副本,顺序相同

cpp 复制代码
#include<stack>
#include<vector>
#include<iostream>
using namespace std;


int main()
{
	stack<int> st1;

	vector<int> v{ 1, 2, 3, 4 };
	stack<int, vector<int>> st2(v);
	cout << " st2: " << st2.size() << endl;


	stack<int, vector<int>> st3(st2);
	cout << " st3: " << st3.size() << endl;

	stack<int> st4(st1);
	cout << " st4: " << st4.size() << endl;

	return 0;

}

二 其他操作

1 empty

返回容器是否为空(即其大小是否为 0)

cpp 复制代码
void Test1()
{
	stack<int> st;
	if (st.empty()) cout << " st is empty" << endl;
	else cout << "st is not empty" << endl;
}

2 size

上面已经演示过了, 这里不说明了

3 top

返回栈顶元素

cpp 复制代码
void Test2()
{
	vector<int> v{ 1, 2, 3, 4 };
	stack<int, vector<int>> st(v);

	cout << st.top() << endl;
}

4 push && pop

cpp 复制代码
void push (const value_type& val);
void push (value_type&& val);
void pop();
cpp 复制代码
void Test3()
{
	
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);

	while (!st.empty())
	{
		cout << st.top() << endl;
		st.pop();
	}

}

5 emplace

emplace 作用和 push 一样的, 只是效率不一样, 涉及到了右值引用问题, 后面再讲

cpp 复制代码
void Test4()
{
	stack<string> st;
	st.emplace("first");
	st.emplace("second");

	while (!st.empty())
	{
		cout << st.top() << endl;
		st.pop();
	}
}

6 swap

交换两个容器的内容

cpp 复制代码
void swap (stack& x)
cpp 复制代码
void Test5()
{
	stack<int> st1, st2;

	st1.push(1);
	st1.push(2);
	cout << st1.size() << endl;

	st2.push(10);
	st2.push(20);
	st2.push(30);
	cout << st2.size() << endl;

	st1.swap(st2);
	cout << st1.size() << endl;
	cout << st2.size() << endl;
}

三 总结

这节栈的使用非常简单的, 感觉没有啥要讲的, 重要的是后面 栈的模拟实现还有和 队列联合使用. 对本节概念不清楚的, 可以看看我之前写的栈数据结构. 那里就很清晰了.

这两天成都一直下雨, 冷. 脑壳还有点晕, 最近学习Linux系统, 学到线程了, 早听说线程难, 没想到这么难.继续加油吧!

相关推荐
老歌老听老掉牙14 小时前
案例 7:二维 Rosenbrock 函数最小值(香蕉函数)
c++·pso
Severus_black15 小时前
【C++初阶】Stack、Queue算法题大练兵!
c语言·c++·算法·stl
xiaoye-duck19 小时前
《C++ 项目:手写大模型接入 SDK》DataManager数据管理模块:SQLite持久化存储
开发语言·数据库·c++·sqlite
是main不是漫20 小时前
【C++——类和对象(上)】筑基篇:以封装奠定面向对象之基
c语言·开发语言·c++
小七在进步1 天前
string的使用(1)
c++·visual studio
白杨尚青1 天前
C++进阶篇(六):map 和 set 的模拟实现——用红黑树封装 mymap/myset(迭代器 + operator[])
开发语言·c++·迭代器·stl·set·map·红黑树
kloc1 天前
聊天室项目入口网关子服务的实现
linux·c++
csdn_aspnet2 天前
C++ 3个有序点的方向(Orientation of 3 ordered points)
c++·算法
小七在进步2 天前
string的使用(2)
c++
青少儿编程课堂2 天前
蓝桥杯·全国青少年信息素养大赛·电子学会Python/C++考级:折半搜索优化子集枚举(Meet in the Middle)解析
c++·python·算法·bfs·信息学竞赛