c++ _STL学习 day2

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;

猜你喜欢

转载自www.cnblogs.com/miceputil/p/12314087.html
今日推荐