STL

1、迭代器,头文件是:#include<iterator>

例题:输入一组数;a,b求a+b;

#include<iostream>
#include<iterator>
using namespace std;
int main()
{   istream_iterator<int> input(cin);//生成istream_iterator,能够以类型安全方式从标准输入对象cin输入int值 
     int a=*input;
    int b=*(++input);
    ostream_iterator<int> output(cout);//生成ostream_iterator,能够标准输出流cout输出int值 
    *output=a+b;
    cout<<endl;
    return 0;
}

2、 函数rbegin(即容器中逆向迭代的开始迭代器)和rend(即容器中逆向迭代的结束迭代器)指定逆向输出的元素范围,rbegin()和rend可以根据是否为常量而返回const_reverse_iterator或reverse_iterator.例如list的逆向输出链表中的元素代码是:

list<int>::reverse_iterator rit;
for(rit=L2.rbegin();rit!=L2.rend();rit++)
   cout<<*rit<<" ";


3、copy算法是将容器内的整个内容输出到标准输出,将容器中的指定位置(由第一个参数中的迭代器指定)的每个元素复制到第二个参数中的迭代器指定位置(并不包括该位置),且使用时必须包括#include<algorithm>

#include<iostream>
#include<vector>
#include<iterator> 
#include<algorithm>
using namespace std;
const int MAX=6;
int a[MAX]={1,2,3,4,5,6};
int main()
{   vector<int> v(a,a+MAX);
    ostream_iterator<int> output(cout," ");//这个上面有介绍,只是后面的空格是用来用一个空格分隔整数.若是不想以空格分开,可以删去
    copy(v.begin(),v.end(),output);
    cout<<endl;
    return 0;
}//输出:1 2 3 4 5 6

4、list中操作

/**********链表的基本操作********************
*1、向尾部加入数据:L.push_back();
*2、向首部插入数据:L.push_front();
*3、向链表中插入数据:L.insert();链表的迭代器只会++或--操作
*4、采用reverse_iterator进行链表的反向遍历
*5、remove()用来删除链表中的一个元素,但是链表中的相同元素都会被删除;其中remove_front()删除最前面的元素 
*   remove_all()用来删除所有的元素 
*6、pop_front()删除链首元素,pop_back()删除链尾元素,erase()删除迭代器上的元素
*7、clear()清空链表
*8、find()用来查找元素,找到返回在迭代器中的位置,找不到返回end()迭代器位置,且使用时加:#include<algorithm>                                   *9、sort()用来对链表进行升序排序,使用方法:L.sort();
*10、unique()用来剔除连续重复元素,只留下一个:L.unqiue();
*11、display()是为链表提供一个格式化输出,包括长度和元素,空链表为:(0)();
*12、将一个链表接到另一个链表的尾部:L.conca(L1);  
**********************************************/ 

其中find函数使用方法:

list<int>::iterator pos;
pos=find(L2.begin(),L2.end(),4);
if(pos!=L2.end()) cout<<"Find it!!"<<endl;

其它:

#include<iostream> 
#include<list>
#include<iterator>
#include<algorithm>
using namespace std;
int a[4]={2,6,4,8};
list<int> L1,L2;
int main()
{   ostream_iterator<int> output(cout," "); 
    for(int i=1;i<=5;i++)  
      L1.push_front(i);
    copy(L1.begin(),L1.end(),output);
    cout<<endl;
    L2.insert(L2.begin(),a,a+4);
    copy(L2.begin(),L2.end(),output);
    cout<<endl;
    L1.splice(L1.end(),L2);//删除L2中的所有元素,并将其插入到L1中的第一个参数指定的迭代器位置之前 
    /*L1.merge(L2); 删除L2中的所有元素,并将其按顺序插入到L1中,但是两个list按相同的顺序排列之后才能进行
      L1.swap(L2);交换L1,L2的所有内容
      L2.assign(L2.begin(),L2,end());//将L1中的内容换成L2中的内容,替换在两个迭代器参数指定的范围内 
    */   
    copy(L1.begin(),L1.end(),output);
    cout<<endl;  
    return 0;
}

STL算法之:fill,fill_n,generate,generate_n的用法:

#include<iostream>
#include<vector>
#include<iterator> 
#include<algorithm>
using namespace std;
char nextLetter()
{  static char letter='A';
   return letter++;
}
int main()
{  vector<char> c(10);
   ostream_iterator<char> output(cout," ");
   fill(c.begin(),c.end(),'5');//将字符'5'放在c.begin()和c.end()的每个元素中,但是不包括c.end() 
   /**************
   fill_n(c.begin(),5,'A'); //将字符'A'放在vector c的前5个元素中,输出:A A A A A 5 5 5 5 5
   generate(c.begin(),c.end(),nextLetter); //将函数nextLetter得到的结果放在c.begin()到c.end()的每个元素中
   //输出:A B C D E F G H I J 
   generate_n(c.begin(),5,nextLetter); //将nextLetter得到的结果放在c.begin()开始的5个元素中
   //输出:K L M N O F G H I J   
   **************/ 
   copy(c.begin(),c.end(),output);
   cout<<endl;
   return 0;      
}
 

STL算法之:equal、mismatch、lexicographical_compare

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;
int a[10]={1,2,3,4,5,6,7,8,9,10};
int b[10]={1,2,3,4,100,6,7,8,9,10};
vector<int> v1(a,a+10),v2(a,a+10),v3(b,b+10);
int main()
{   ostream_iterator<int> output(cout," ");
    pair<vector<int>::iterator,vector<int>::iterator> pos;//实例化pair迭代器对,表示整形的vector的pos. 
    pos=mismatch(v1.begin(),v1.end(),v3.begin());//比较数值序列,返回一个pair迭代器对,表示每个序列中不匹配元素的地方,若是所有的元素匹配返回每个序列的最后迭代器 
    cout<<(pos.first-v1.begin())<<" "<<*pos.first<<" "<<*pos.second<<endl; 
    /**************
    bool result=equal(v1.begin(),v1.end(),v2.begin());//比较两个数值序列是否相等,返回为bool类型,不想同返回false
    char *c1="Bye",*c2="Hello";
    bool result=lexicographical_compare(c1,c1+10,c2,c2+10);//比较两个字符数组的内容,若是第一个序列中的元素小于第二个序列中的元素返回true 
    **************/ 
    return 0;
}

STL算法之:remove,remove_if,remove_copyj和remove_copy_if

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;
int a[10]={1,2,2,3,4,5,6,7,8,9};
bool Greater(int x){return x>6;} 
int main()
{   ostream_iterator<int> output(cout," ");
    
    vector<int> v(a,a+10);
    vector<int>::iterator it;
    it=remove(v.begin(),v.end(),2);//删除vector v中从v.begin()到v.end()中的所有为2的元素,但不包括v.end() 
    //it=remove_if(v.begin(),v.end(),Greater);//删除从v3.begin()到v3.end()中满足greater函数返回true所有元素
    copy(v.begin(),it,output);//注意输出~~ 
    cout<<endl; 
    
    vector<int> v1(a,a+10);
    vector<int> v2(10,0);
    remove_copy(v1.begin(),v1.end(),v2.begin(),2);//先删除V1.begin()到v1.end()中的所有为2的元素,然后复制到从v2.begin()开始后的语句中 
    //remove_copy_if(v1.begin(),v1.end(),v2.begin(),Greater);//不解释了,猜的到~~~ 
    copy(v2.begin(),v2.end(),output);
    cout<<endl;

    return 0;
}

STL算法:replace,replace_if,replace_copy和replace_copy_if

#include<iostream>
#include<vector>
#include<iterator>
#include<algorithm>
using namespace std;
int a[10]={1,2,2,3,4,5,6,7,8,9};
bool Greater(int x){return x>6;} 
int main()
{   ostream_iterator<int> output(cout," ");
    
    vector<int> v(a,a+10);
    replace(v.begin(),v.end(),2,20);//将vector v中从v.begin()到v.end()中的所有为2的元素改为20,但不包括v.end() 
    //replace_if(v.begin(),v.end(),Greater,20);//将从v3.begin()到v3.end()中满足greater函数d的所有元素改为20 
    copy(v.begin(),v.end(),output);//注意输出~~ 
    cout<<endl; 
    
    vector<int> v1(a,a+10);
    vector<int> v2(10);
    replace_copy(v1.begin(),v1.end(),v2.begin(),2,20);//将V1.begin()到v1.end()中的所有为2的元素改为20,然后复制到从v2.begin()开始后的语句中 
    //replace_copy_if(v1.begin(),v1.end(),v2.begin(),Greater,20);//不解释了,猜的到~~~ 
    copy(v2.begin(),v2.end(),output);
    cout<<endl;

    return 0;
}


 






 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值