5. STL--Stack
//需要stack头文件
stack为后进先出(LIFO=Last in First out)
5.1 构造
tack<int> s; //需要传入一个参数,stack本身是一个类
5.2 常用函数
- s.top() 可以获得栈顶元素
- s.push() 可以在栈顶添加一个元素
- s.pop() 可以弹出栈顶元素,且无返回值
- s.size(). 查看元素个数
stack<int> s; //需要传入一个参数,stack本身是一个类
s.push(1); //s.push()可以在栈顶输入一个元素
s.push(2);
s.push(3);
cout << s.top() << endl ; //s.top()可以获得栈顶元素
//此时栈顶为3
s.pop(); //s.pop()可以弹出栈顶的一个元素,即弹出3
//此时栈顶为2
cout << s.top() << endl;
cout << s.size() << endl ; //此时元素个数为2
5.3 应用:进制转换
#include <iostream>
#include <stack>
using namespace std;
int itob(int decimal)
{
stack<int> s;
int res=0;
while(decimal!=0) //计算转换
{
s.push(decimal%2);
decimal/=2;
}
while(!s.empty()) //当栈非空的时候
{
res=res*10+s.top(); //刚好是从上到下读取,即倒序读取
s.pop();
}
return res;
}
int main()
{
int decimal=31;
int binary=itob(decimal);
cout << binary << endl;
return 0;
}
5.4 字符串转化为数字
//也是利用sstream和string头文件
string s1;
int i;
getline(cin,s1);
stringstream line;
line << s1;
while(line >> i) cout << i << endl;
5.5 数字转字符串
//也是利用sstream和string头文件
int num=198765;
string out;
stringstream s;
s<<num;
s>>out;
cout << out << endl;
5.6 在句子中单个输出单词
利用stringstream流的特性
string out,line;
stringstream s;
getline(cin,line); //输入一个string句子
s<<line; //将该句子流入stringstream流中
while(s>>out) cout << out << endl; //将该留逐个输出
5.7 在句子中逆序输出单词
用到栈最逆序,用stringstream来逐个流入单词
string out,line;
stack<string> mystack;
stringstream ss;
getline(cin,line); //输入一个string句子
ss<<line; //将该句子流入stringstream流中
while(ss>>out) mystack.push(out); //将该留逐个输出,并放到mystack的栈顶
while(!mystack.empty())
{
cout << mystack.top();
mystack.pop(); //依次输出栈顶的元素,再出栈,即逆序输出后删除最后一个元素
if(mystack.size()!=0) cout << " " ; //当弹出最后一个元素后,变为空栈,此时不再输出空格,即做到末尾无空格
}
cout << endl;
6. STL--queue
queu为先进先出(FIFO=First in First out)
queue<int> q;
q.push(1); //同样可以用push来在 /*末尾*/ 添加一个元素
q.push(2);
q.push(3);
cout << "The first element is " << q.front() << endl; //第一个元素应该为1
q.pop(); //弹出 /*第一个*/ 元素 即弹出1
cout << "The first element is " << q.front() << endl; //第一个元素应该为2
7. STL--map
map是映射,映射key与value两者。
普通map底层为树状结构,是有序的
7.1 构造与赋值
- 直接构造(数组法)
map<int, string> mapStudent; //前两个参数是关键词
mapStudent[1]="student_one";
mapStudent[2]="student_two";
mapStudent[3]="student_three";
- 利用insert函数
map<int, string> mapStudent; //需要三个参数,前两个是关键词,第三个是对象名称
mapStudent.insert(pair<int, string>(1, "student_one")); //此处以pair形式导入,实际上是struct的形似,整对导入key与value
mapStudent.insert(pair<int, string>(2, "student_two"));
mapStudent.insert(pair<int, string>(3, "student_three"));
map<int, string>::iterator iter; //便利
for(iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout<<iter->first<<' '<<iter->second<<endl;
7.2 遍历
- 普通迭代器法
for(map<int , string>::iterator iter = mapStudent.begin(); iter != mapStudent.end(); iter++)
cout<<iter->first<< " " <<iter->second<<endl;
- 自动迭代器
for(auto it=mapStudent.begin();it!=mapStudent.end();++it)
cout <<it->first << " " << it->second <<endl;
- 自动识别法
此处temp是指针,
for(auto temp:mapStudent)
cout << temp.first << " " << temp.second <<endl ;
8. STL--set
去重复性
set<int> s;//树状结构,有序
unordered_set<int> s2;//哈希结构,无序,快
s.insert(3);
s.insert(4);
s.insert(4);
s.insert(4);
cout<<s.size()<<endl;
for(auto tmp:s)
cout<<tmp<<" ";
cout<<endl;
for(auto it=s.begin();it!=s.end();it++)
cout<<*it<<" ";
cout<<endl;
9.STL--deque
可以从头插入元素,也可以从尾插入元素
deque<int> d;
d.push_back(1);
d.push_back(2);
d.push_front(9);
d.push_front(4);
d.pop_back();
d.pop_front();
for(auto tmp:d) cout<<tmp<<endl;
for(auto it=d.begin();it!=d.end();it++) cout<<*it<<endl;
10. STL--List
list<int> li;
li.push_back(6);
li.push_front(5);
li.emplace_front(9);
li.emplace_back(10);
li.insert(++li.begin(),2);
for(auto tmp:li) cout<<tmp<<endl;
for(auto it=li.begin();it!=li.end();it++) cout<<*it<<endl;