目录
stack
std::stack 类是一种容器适配器,是栈------先进后出数据结构
模板原型
template<
class T,
class Container = std::deque<T>
> class stack;
头文件
#include <stack>
模板的成员类型和成员对象和成员函数
std::stack - cppreference.comhttps://zh.cppreference.com/w/cpp/container/stack
栈类模板的容器对象
//实例化一个 栈类模板的容器对象
std::stack<std::string> stack;
实例
#include <iostream>
#include <stack>
using namespace std;
int main()
{
//栈这种数据结构----先进后出
//实例化一个 栈类模板的容器对象 栈的成员类型是string
std::stack<std::string> stack;
//入栈 --向栈顶插入元素
stack.push("zhang3");
stack.push("li4");
stack.push("wang5");
stack.push("lao6");
//出栈
while(1)
{
//出栈的数据如何获取数据
cout<<stack.top()<<endl;
//删除--删除栈顶
stack.pop();
//判断栈是否为空
if(stack.empty() == true)
break;
}
return 0;
}
queue
std::queue 类是一种容器适配器,是队列------先进先出数据结构
模板原型
template<
class T,
class Container = std::deque<T>
> class queue;
头文件
#include <queue>
模板的成员类型和成员对象和成员函数
std::queue - cppreference.comhttps://zh.cppreference.com/w/cpp/container/queue
队列类模板的容器对象
//实例化 队列类模板的对象
std::queue<std::string> queue;
实例
#include <iostream>
#include <queue>
using namespace std;
int main()
{
//实例化 队列类模板的对象
std::queue<std::string> queue;
//入队--尾插 ---两端操作
queue.push("zhang3");
queue.push("li4");
queue.push("wang5");
queue.push("lao6");
//判断队列是否为空
while(!queue.empty())
{
//出队之前,先获取数据--头部数据
cout<<queue.front()<<endl;
//出队,头部数据删除
queue.pop();
}
return 0;
}
map
std::map 是一种有序关联容器,它包含具有唯一键的键值对。键之间以比较函数 Compare 排序。搜索、移除和插入操作拥有对数复杂度。map 通常实现为红黑树。
模板原型
template<
class Key,
class T,
class Compare = std::less<Key>,
class Allocator = std::allocator<std::pair<const Key, T>>
> class map;
头文件
#include <map>
模板的成员类型和成员对象和成员函数
std::map - cppreference.comhttps://zh.cppreference.com/w/cpp/container/map
关联类模板的容器对象
//实例化一个关联容器类模板的对象
//数据格式: 键值对的方式存在 key-value
std::map<long int,std::string> map;
//实例化一个键值对类模板的对象
std::pair<long int,std::string> data(200,"lao6");
实例1
#include <iostream>
#include <map>
using namespace std;
int main()
{
//实例化一个关联容器类模板的对象
//数据格式: 键值对的方式存在 key(int)-value(string)
std::map<long int,std::string> map;
//插入数据 operator[] 访问或插入指定的元素
map[100] = "zhang3";
map[120] = "li4";
map[122] = "wang5";
//实例化一个键值对类模板的对象
std::pair<long int,std::string> data(200,"lao6");
//insert插入数据
map.insert(data);
//访问
cout<<map[120]<<endl;
//通过迭代器遍历整个容器
std::map<long int,std::string>::iterator it;
for(it=map.begin(); it!=map.end(); it++)
{
//it->first 得到键 second 得到值
cout<<it->first<<"\t"<<it->second<<endl;
}
return 0;
}
实例2 简易输入法
#include <iostream>
#include <map>
using namespace std;
int main()
{
//实现一个简单的拼音中文输入法
std::map<string,string> map;
//插入数据
map["a"] = "啊阿錒吖嗄";
map["b"] = "吧把不被表";
map["c"] = "从成层出插";
map["ni"] = "你尼呢腻拟";
while(1)
{
string input;
cin>>input;//输入key
string value = map[input];//获取对应key的value
//汉字字符串--->utf-8占3个字节 //遍历value
for(int i=0; i<value.size()/3; i++)//汉字的个数
{
cout<<i+1<<" "<<value.substr(3*i,3)<<"\t";
}cout<<endl;
//根据输入数字显示对应的汉字
int num=0;
cin>>num;
cout<<value.substr(3*(num-1),3)<<endl;
}
return 0;
}
deque
std::deque(double-ended queue,双端队列)是有索引的序列容器,它允许在它的首尾两端快速插入及删除。另外,在 deque 任一端的插入或删除不会使指向其余元素的指针或引用失效。等于队列和栈的结合体
模板原型
template<
class T,
class Allocator = std::allocator<T>
> class deque;
头文件
#include <deque>
模板的成员类型和成员对象和成员函数
std::deque - cppreference.comhttps://zh.cppreference.com/w/cpp/container/deque
双端队列类模板的容器对象
std::deque<int> deque;
实例1
#include <iostream>
#include <deque>
using namespace std;
int main()
{
std::deque<int> deque;
//实现队列功能
deque.push_back(10);
deque.push_back(20);
deque.push_back(30);
deque.push_back(40);
//遍历
for(int i = 0; i<deque.size();i++)
{
cout<<deque[i]<<endl;
}
//也可以使用迭代器遍历
for(std::deque<int>::iterator it = deque.begin();it!=deque.end();it++)
{
cout<<*it<<endl;
}
//出队 头删
//判断是否为空
while(!deque.empty())
{
//先访问头部数据
cout<<deque.front()<endl;
deque.pop_front();//
}
return 0;
}