现在的位置: 首页 > 综合 > 正文

STL 函数初步

2013年10月11日 ⁄ 综合 ⁄ 共 3303字 ⁄ 字号 评论关闭

关于栈的应用:

  1. // 栈的五种操作  
  2. stack <char>  my;  //定义栈  
  3. my.empty() ;   // 判断栈是否非空  
  4. my.size();      // 判断栈中元素的个数  
  5. my.push(a[i]); //  压栈  
  6. my.top();      //    取出栈顶元素  
  7. 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
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");  

}


【上篇】
【下篇】

抱歉!评论已关闭.