C++语言程序设计 迭代器 ● 迭代器提供了顺序访问容器中每个元 素的方法。 迭 “+”运算符来获得指向下一个元素的迭 代 代器 器 -“*”运算符访问一个迭代器所指向的元素 -“>”运算符访问迭代器所指向元素的成员 ●迭代器是泛化的指针。 STL的每人容器类模板中,都定头米 了一组对应的迭代器类。 6
C++语言程序设计 迭代器 迭代器提供了顺序访问容器中每个元 素的方法。 – “++”运算符来获得指向下一个元素的迭 代器 – “*”运算符访问一个迭代器所指向的元素 – “->”运算符访问迭代器所指向元素的成员 迭代器是泛化的指针。 STL的每一个容器类模板中,都定义 了一组对应的迭代器类。 6 迭代器
C++语言程序设计 输入流迭代器 契金离菱露器是丛个尖镶金流中连织地输入某种 istream iterator<T> 迭 羲署贾条给复默认构造两数:该类型 代 ●构造函数 器 istream_iterator<T>(istream&in); 以输入流(如cin)为参数构造 ● 默认构造函数创建的迭代器指向输入流的结束位 Vindows下按Ctrl+Z和回车键,Linux下按Ctrl+D ● 可用*(p++)获得下一个输入的元素
C++语言程序设计 输入流迭代器 输入流迭代器:从一个输入流中连续地输入某种 类型的数据,是一个类模板 – istream_iterator<T> – 类型T要满足两个条件:有默认构造函数;该类型 数据可用”>>”从输入流输入 构造函数 – istream_iterator<T>(istream& in); – 以输入流(如cin)为参数构造 默认构造函数创建的迭代器指向输入流的结束位 置 – Windows下按Ctrl+Z和回车键,Linux下按Ctrl+D 可用*(p++)获得下一个输入的元素 7 迭代器
C++语言程序设计 输出流迭代器 输出流迭代器: 类型的数据,也是 二个契!鎏中连续地输出某种 类模板 ostream_iterator<T> 迭 类型T要满足一个条件:该类型数据可用”<<”向输出 流输出 代 。构造函数 器 ostream iterator<T>(ostream&out); ostream iterator<T>(ostream&out,const char delimiter): 构造时需要提供输出流(如cout),参数delimiter 是可选的分隔符 对输出流迭代器iter,*iter只能作为赋值运算符 的左值 *iter=x,相当于执行了out<<x或 out<<x<<delimiter
C++语言程序设计 输出流迭代器 输出流迭代器:向一个输出流中连续地输出某种 类型的数据,也是一个类模板 – ostream_iterator<T> – 类型T要满足一个条件:该类型数据可用”<<”向输出 流输出 构造函数 – ostream_iterator<T>(ostream& out); – ostream_iterator<T>(ostream& out, const char * delimiter); – 构造时需要提供输出流(如cout),参数delimiter 是可选的分隔符 对输出流迭代器iter, *iter只能作为赋值运算符 的左值 – *iter = x,相当于执行了 out<<x 或 out<<x<<delimiter 8 迭代器
C++语言程序设计 输入流迭代器和输出流迭代器 。二者都属于适配器 迭 适配器是用来为已有对象提供新的接口 代 的对象,本身一般不提供新功能 器 输入流适配器和输出流适配器为流对象 提供了迭代器的接口
C++语言程序设计 输入流迭代器和输出流迭代器 二者都属于适配器 – 适配器是用来为已有对象提供新的接口 的对象,本身一般不提供新功能 – 输入流适配器和输出流适配器为流对象 提供了迭代器的接口 9 迭代器
C++语言程序设计 例10-2 /包含的头文件略去… using namespace std; 迭 double square(double x){ 代 return xx; 器int main0( transform(istream_iterator<double>(cin), istream_iterator<double>(), ostream_iterator<double>(cout,"\t"),square): cout <endl; return 0; a
C++语言程序设计 例10-2 10 //包含的头文件略去…… using namespace std; double square(double x) { return x * x; } int main() { transform(istream_iterator<double>(cin), istream_iterator<double>(), ostream_iterator<double>(cout, "\t"), square); cout << endl; return 0; } 迭代器