c++中迭代器是什么意思?
1个回答
展开全部
C++中迭代器
C++中的容器
标准序列容器:vector、string、deque、list
标准关联容器:set、multiset、map、multimap
迭代器的分类
根据迭代器所支持的操作,可以把迭代器分为5类。
1、输入迭代器:是只读迭代器,在每个被遍历的位置上只能读取一次。
2、输出迭代器:是只写迭代器,在每个被遍历的位置上只能被写一次。
3、前向迭代器:兼具输入和输出迭代器的能力,但是它可以对同一个位置重复进行读和写。但它不支持operator--,所以只能向前移动。
4、双向迭代器:很像前向迭代器,只是它向后移动和向前移动同样容易。
5、随机访问迭代器:有双向迭代器的所有功能。而且,它还提供了“迭代器算术”,即在一步内可以向前或向后跳跃任意位置。
C++容器中提供的迭代器
1、输入和输出迭代器的模型分别是建立在针对输入和输出流(例如文件)的读写操作基础上的。所以不难理解,输入和输出迭代器最常见的表现形式是 istream_iterator和ostream_iterator。
2、所有的标准STL容器都支持比前向迭代器功能更强大的迭代器。(哈希容器的一种、单向链表容器例外,它们提供前向迭代器)
3、标准关联容器都提供了双向迭代器。list也是如此。
4、vector、string、deque都提供了随机访问迭代器。指向数组的内部指针对于数组来说也是随机访问迭代器。
istream_iterator和ostream_iterator使用示例
复制代码
// istream_iterator example
#include <iostream>
#include <iterator>
using namespace std;
int main () {
double value1, value2;
cout << "Please, insert two values: ";
istream_iterator<double> eos; // end-of-stream iterator
istream_iterator<double> iit (cin); // stdin iterator
if (iit!=eos) value1=*iit;
iit++;
if (iit!=eos) value2=*iit;
cout << value1 << "*" << value2 << "=" << (value1*value2) << endl;
return 0;
}
复制代码
output:
Please, insert two values: 2 32
2*32=64
复制代码
// ostream_iterator example
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main () {
vector<int> myvector;
for (int i=1; i<10; ++i) myvector.push_back(i*10);
ostream_iterator<int> out_it (cout,", ");
copy ( myvector.begin(), myvector.end(), out_it );
return 0;
}
复制代码
output:
10, 20, 30, 40, 50, 60, 70, 80, 90,
C++中的容器
标准序列容器:vector、string、deque、list
标准关联容器:set、multiset、map、multimap
迭代器的分类
根据迭代器所支持的操作,可以把迭代器分为5类。
1、输入迭代器:是只读迭代器,在每个被遍历的位置上只能读取一次。
2、输出迭代器:是只写迭代器,在每个被遍历的位置上只能被写一次。
3、前向迭代器:兼具输入和输出迭代器的能力,但是它可以对同一个位置重复进行读和写。但它不支持operator--,所以只能向前移动。
4、双向迭代器:很像前向迭代器,只是它向后移动和向前移动同样容易。
5、随机访问迭代器:有双向迭代器的所有功能。而且,它还提供了“迭代器算术”,即在一步内可以向前或向后跳跃任意位置。
C++容器中提供的迭代器
1、输入和输出迭代器的模型分别是建立在针对输入和输出流(例如文件)的读写操作基础上的。所以不难理解,输入和输出迭代器最常见的表现形式是 istream_iterator和ostream_iterator。
2、所有的标准STL容器都支持比前向迭代器功能更强大的迭代器。(哈希容器的一种、单向链表容器例外,它们提供前向迭代器)
3、标准关联容器都提供了双向迭代器。list也是如此。
4、vector、string、deque都提供了随机访问迭代器。指向数组的内部指针对于数组来说也是随机访问迭代器。
istream_iterator和ostream_iterator使用示例
复制代码
// istream_iterator example
#include <iostream>
#include <iterator>
using namespace std;
int main () {
double value1, value2;
cout << "Please, insert two values: ";
istream_iterator<double> eos; // end-of-stream iterator
istream_iterator<double> iit (cin); // stdin iterator
if (iit!=eos) value1=*iit;
iit++;
if (iit!=eos) value2=*iit;
cout << value1 << "*" << value2 << "=" << (value1*value2) << endl;
return 0;
}
复制代码
output:
Please, insert two values: 2 32
2*32=64
复制代码
// ostream_iterator example
#include <iostream>
#include <iterator>
#include <vector>
using namespace std;
int main () {
vector<int> myvector;
for (int i=1; i<10; ++i) myvector.push_back(i*10);
ostream_iterator<int> out_it (cout,", ");
copy ( myvector.begin(), myvector.end(), out_it );
return 0;
}
复制代码
output:
10, 20, 30, 40, 50, 60, 70, 80, 90,
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询