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;
}