C++迭代器学习笔记

来源:互联网 发布:youtube翻墙软件下载 编辑:程序博客网 时间:2024/06/05 19:40

1、istream_iterator和ostream_iterator的学习

    istream_iterator<T> in(strm):其中<T>表示输入类型, strm为istream_iterator指向的流提供了输入操作符(>>)

    ostream_iterator<T>out(strm) :输出操作符 (<<)的任何类型都可以创建 ostream_iterator对象,



2.vector<int>::reverse_iterator  声明一个逆序迭代器要求与v.rbegin(),v.rend()共同使用

#include <iostream>#include <vector>using namespace std;template <typename T>   //*声明一个类模板,类型名字为Tvoid printVector(const vector<T>&vec);int main(){const int SIZE=6;int a[SIZE]={1,2,3,4,5,6};vector<int> v;  //*定义一个容器为整形的vcout<<"The initial size of v is:"<<v.size()<<"\nThe initial capacity of v is:"<<v.capacity();v.push_back(2);  //*在v容器的末尾加元素2v.push_back (3); //*在末尾加上元素3v.push_back (4);cout<<"\nThe size of v is: "<<v.size()<<"\nThe capacity of v is: "<<v.capacity();cout<<"\n\nContents of array a using pointer notation: ";int *p=&a[0];p++;int *p1=a;p1++;for(int *ptr=a;ptr!=a+SIZE;++ptr)cout<<*ptr<<' ';cout<<"\nContents of vector v using iterator notation: ";printVector(v);    cout<<"\nReserved contents of vector v: ";vector<int>::reverse_iterator p2;  //逆迭代指针for(p2=v.rbegin();p2!=v.rend();++p2) //v.rbegin返回一个逆序迭代器,它指向容器v的最后一个元素//v.rend返回一个逆序迭代器,它指向容器v的第一个元素前面的位置cout<<*p2<<' ';cout<<endl;return 0;}template <typename T>void printVector(const vector<T>&vec){vector<T>::const_iterator p1;for(p1=vec.begin();p1!=vec.end();p1++)//*返回一个迭代器,它指向容器vec的第一个元素//*返回一个迭代器,它指向容器vec的最后一个元素的下一个位置cout<<*p1<<' ';}

3. ostream_iterator是流迭代器迭代器是标准模板库中的,因此是类模板ostream_iterator<int>指定了类型,就是迭代器读写的类型,通过这个流迭代器可以把你要输入的写入到指定的流中,cout就是指定的流,即标准输出:语句:ostream_iterator<int>output(cout," "):它看成一个指向输出流的指针,通过这个指针你可以把东西写的输出流中。copy (v.begin(),v.end(),output);把向量v中的数据放入cout输出流中,通过流迭代器output。ostream_iterator<int>output(cout," "),每放一个整数,就末尾添加一个空格。

c.at(n):返回下标为n的元素的引用。如果下标越界,则该操作无效

v.insert(v.begin(),a,a+SIZE)在开始前插入6个数即a[0]~a[5]

#include <iostream>#include <vector>#include <algorithm>using namespace std;int main(){const int SIZE=6;int a[SIZE]={1,2,3,4,5,6};vector<int>v(a,a+SIZE); //包含元素[0,6)ostream_iterator<int>output(cout," ");cout<<"Vector v contains: ";copy(v.begin(),v.end(),output);    cout<<"\nFirst element of v: "<<v.front()<<"\nLast element of v: "<<v.back();v[0]=7;v.at(2)=10;//*返回下标为2的元素的引用v.insert(v.begin()+1,22);//*在迭代器v所指向的元素前面插入值为22的元素,cout<<"\nContents of vector v after changes: ";copy(v.begin(),v.end(),output);try{v.at(100)=777;//*返回下标为100的元素,如果越界,该操作未定义}catch (out_of_range e){cout<<"\n Expection: "<<e.what();}v.erase(v.begin());cout<<"\nContents of vector v after erasr: ";copy(v.begin(),v.end(),output);    cout << "\nAfter erase,vector v "         << (v.empty()?"is":"is not") << " empty";     v.insert(v.begin(),a,a+SIZE); cout<<"\nContents of vector v before clear: "; copy(v.begin(),v.end(),output); v.clear(); cout<<"\nAfter clear,vector v" <<(v.empty()?"is":"is not")<<"empty"; cout<<endl; return 0;}