C++迭代器学习笔记
2013-10-02 21:59
316 查看
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()共同使用
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]
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> //*声明一个类模板,类型名字为T void printVector(const vector<T>&vec); int main() { const int SIZE=6; int a[SIZE]={1,2,3,4,5,6}; vector<int> v; //*定义一个容器为整形的v cout<<"The initial size of v is:"<<v.size() <<"\nThe initial capacity of v is:"<<v.capacity(); v.push_back(2); //*在v容器的末尾加元素2 v.push_back (3); //*在末尾加上元素3 v.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; }
相关文章推荐
- C++/C功能程序代码
- 类的继承与派生 c++ ~~菜鸟的第一篇博文
- c++子类和父类成员函数重名
- C++多重继承,虚函数表的次序
- LNUX C语言系统编程(复制文件描述符)
- C++面向对象程序设计 第六章 排序
- C/C++中extern关键字详解
- C++沉思录之智能指针句柄
- C语言变量声明内存分配
- 探索C++的秘密之一详解extern "C"
- C++运算符重载
- C++函数指针的运用
- 大话设计模式学习笔记-装饰模式(c++描述)
- C++中的引用
- C语言递归练习
- C语言递归练习
- 百度2014校招笔试题目题解(更新了第1题的算法,10.9下午)
- C++字符串的使用学习笔记01
- POJ 1260
- 函数调用时的实参为变量时 -- C语言的每条可执行语句最终都将转换成二进制的机器指令