STL 函数应用

关于栈的应用:

 

 

// 栈的五种操作  
stack <char>  my;  //定义栈  
my.empty() ;   // 判断栈是否非空  
my.size();      // 判断栈中元素的个数  
my.push(a[i]); //  压栈  
my.top();      //    取出栈顶元素  
my.pop();    //     弹出栈顶元素  

 

 

下面附一个例子:

post code:

 

#include<stack>   
#include<iostream>  
using namespace std;  
stack<int> my;   
  
void show()  
{   
   int element;  
   cout<<"show all element!"<<endl;  
   while(!my.empty())    //如不为空 继续输出  
   {  
     element=my.top();   //输出栈顶元素  
     cout<<element<<" "<<my.top()<<endl;  
     my.pop();              //将元素出栈    
   }    
}  
int main()  
{   
    int a[5]={1,2,3,4,5},i;  
    for(i=0;i<=4;i++)  
      my.push(a[i]);   //将元素压栈  
    show();   
    cout<<"the size of stack is "<<my.size()<<endl; //判断战中元素的个数  
    my.push(1);                 
    cout<<"we push the number one"<<endl;  
    cout<<"the size of stack is "<<my.size();      
     
      
}  

 

 

关于向量的应用:

向量和数组类似  只是不用开辟固定的存储空间 随用随放
//总共要注意的有五点  
vector<int> my;           //定义向量 my   
vector<int> iterator j;  //向量的游标的使用  
  my.push_back(a[i]);      //向量的输入  
   *j                                   //向量的输出   
my.begin();   my.end();      //向量的起始位置和终止位置  

 


例子
post code:


#include<vector>      //包含向量的库函数  
#include<iostream>  
using namespace std;  
  
int main()  
{    
   int i;  
   vector<char> my;  //向量的定义  
   vector<char>::iterator j;//向量游标的定义  
   char *str="Hello world!";  
   while(*str!='\0')   //如果指针的首位置不为“\0”,指针向后退以为  
   {  
     my.push_back(*str);  //向量的输入  
     str++;              //指针向后退1位    
   }  
     
   for(j=my.begin();j!=my.end();j++) //注意 注意 游标j是!=最后的 这里不能用<  
   {  
     cout<<*j;            //游标指向的的首位置,不等于末位置  
   }  
   cout<<endl;     
}                //最后输出“Hello world!”  

 


 集合的应用:

1进行排序 按字母顺绪
2去除重复项
3注意字符这里采用的是 string
 
  1. set<string> my;   //建立集合  
    ser<string>::iterator j;  //设置游标  
    my.insert("apple")  //插入数据  
    my.begin();  //找到最前一项  
    my.end();    //找到最后一项  
 


#include<iostream>  
#include<set>  
using namespace std;  
int main()  
{  
   set<string> my;  
   set<string>::iterator j;  
     
   my.insert("apple");  
   my.insert("grape");  
   my.insert("apple");  
   my.insert("bear");  
   for(j=my.begin();j!=my.end();j++)  
    cout<<*j<<endl;     
  
}   

 

 

输出结果为 apple bear grape     
两个apple 去重 按顺序排列

列表的应用:

注意 列表有多个应用 现在只写上排序的应用 用途很广范
 


list<int> my;   //定义列表  
list<int>::iterator j; //建立游标  
my.begin();   //锁定起始位置  
my.end();    //锁定结束位置  
my.push_back();  //从后插入元素  

 

 

例子:
post code:


#include<iostream>  
#include<list>  
using namespace std;  
int main()  
{  
   list<int> my;  
   list<int>::iterator j;  
   my.push_back(20);       //插入数据  
   my.push_back(10);  
   my.push_back(30);      
   for(j=my.begin();j!=my.end();j++)  //输出结果  
     cout<<*j<<endl;  
   my.sort();                        //从小到大排序  
   for(j=my.begin();j!=my.end();j++)  
     cout<<*j<<endl;  
   my.sort(greater<int>());          //从大到小排序  
   for(j=my.begin();j!=my.end();j++)  
     cout<<*j<<endl;  
      
}  

 

输出的结果是
20 10 30
10 20 30
30 20 10


 双端队列的应用:

双端队列的功能很强大 现在仅列出一部分
见例子
post code:
 


#include<iostream>  
#include<deque>  
using namespace std;  
  
void show(deque<int> mydeque,char *name)  //输出函数  
{  
   deque<int>::iterator j;  
    cout<<"The content is "<<name<<endl;  
   for(j=mydeque.begin();j!=mydeque.end();j++)  
    cout<<*j<<" ";       
    cout<<endl;  
       
}  
  
  
  
int main()  
{  
   deque<int> deq1;  
   deque<int> deq2(10,6);  //10个值为6的元素  
   deque<int>::iterator j; //游标     
     
   show(deq1,"deq1");  
   show(deq2,"deq2");  
     
   deq1.push_back(2);        //尾插入数据   
   deq1.push_back(10);  
   cout<<"already insert 2 and 10 in deque1 from back"<<endl;  
   show(deq1,"deq1");  
     
   deq1.push_front(5);       //首插入数据   
   deq1.push_front(20);  
   cout<<"already insert 5 and 20 in deque1 from front"<<endl;  
   show(deq1,"deq1");  
     
   deq1.insert(deq1.begin()+1,3,9); //在2号位置插入3个9     
   cout<<"中间插入数据"<<endl;  
   cout<<"deq1.insert(deq1.begin()+1,3,9)"<<endl;  
   show(deq1,"deq1");  
     
   cout<<"deq1.at(4)="<<" "<< deq1.at(4)<<endl; //像数组查找元素 从0起始   
   cout<<"deq1[4]="<<" "<<deq1[4]<<endl;   
   show(deq1,"deq1");  
     
   cout<<"   deq1.at(3)=100 deq1[4]=1000"<<endl; //赋值   
   deq1.at(3)=100;  
   deq1[4]=1000;  
   show(deq1,"deq1");  
     
   cout<<"deq1.pop_front() deq1.pop_back()"<<endl; //队首尾出队   
   deq1.pop_front();  
   deq1.pop_back();  
   show(deq1,"deq1");     
     
   cout<<"deq1.erase(deq.begin()+2)"<<endl;   // 清除   
   deq1.erase(deq1.begin()+2);  
   show(deq1,"deq1");    
     
   cout<<"deq2.assign(8,2)"<<endl;    //重新赋值   
   show(deq2,"deq2");   
   deq2.assign(8,2);  
   show(deq2,"deq2");    
  
}  

 

转载于:https://www.cnblogs.com/ysh-blog/archive/2012/08/09/2629557.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值