您的位置:首页 > 编程语言 > C语言/C++

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()共同使用

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: