没有合适的资源?快使用搜索试试~ 我知道了~
首页C/C++迭代器使用具体解释
迭代器是一种检查容器内元素并遍历元素的数据类型。能够替代下标?问vector对象的元素。 每种容器类型都定义了自己的迭代器类型,如 vector: vector<int>::iterator iter; 这符语句定义了一个名为 iter 的变量。它的数据类型是 vector<int> 定义的 iterator 类型。每一个标准库容器类型都定义了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义同样。 begin 和 end 操作 每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。假设容器中有元素的话。由
资源详情
资源评论
资源推荐
C/C++迭代器使用具体解释迭代器使用具体解释
迭代器是一种检查容器内元素并遍历元素的数据类型。能够替代下标?问vector对象的元素。
每种容器类型都定义了自己的迭代器类型,如 vector:
vector<int>::iterator iter;
这符语句定义了一个名为 iter 的变量。它的数据类型是 vector<int> 定义的 iterator 类型。每一个标准库容器类型都定义
了一个名为 iterator 的成员,这里的 iterator 与迭代器实际类型的含义同样。
begin 和 end 操作
每种容器都定义了一对命名为 begin 和 end 的函数,用于返回迭代器。假设容器中有元素的话。由 begin 返回的迭代器
指向第一个元素:
vector<int>::iterator iter = ivec.begin();
上述语句把 iter 初始化为由名为 vector 操作返回的值。如果 vector 不空,初始化后,iter 即指该元素为 ivec[0]。
由 end 操作返回的迭代器指向 vector 的“末端元素的下一个”。表明它指向了一个不存在的元素。如果 vector 为空。begin
返回的迭代器与 end 返回的迭代器同样。由 end 操作返回的迭代器并不指向 vector 中不论什么实际的元素,相反,它仅仅是
起一个哨兵(sentinel)的作用。表示我们已处理完 vector 中全部元素。
【备注:不用操心begin和end在循环中的条件推断。大胆使用吧!】
vector 迭代器的自增和解引用运算
迭代器类型可使用解引用操作符(dereference operator)(*)来?问迭代器所指向的元素:
*iter = 0;
解引用操作符返回迭代器当前所指向的元素。如果 iter 指向 vector 对象 ivec 的第一元素,那么 *iter 和 ivec[0] 是指向同
一个元素。上面这个语句的效果是把这个元素的值赋为 0。
迭代器使用自增操作符向前移动迭代器指向容器中下一个元素。从逻辑上说。迭代器的自增操作和 int 型对象的自增操作
类似。对 int 对象来说。操作结果是把 int 型值“加 1”,而对迭代器对象则是把容器中的迭代器“向前移动一个位置”。因此,假
设 iter 指向第一个元素,则 ++iter 指向第二个元素。
因为 end 操作返回的迭代器不指向不论什么元素。因此不能对它进行解引用或自增操作。
迭代器的其它操作
还有一对可运行于迭代器的操作是比?:用 == 或 != 操作符来比?两个迭代器,假设两个迭代器对象指向同一个元素。则
它们相等,否则不相等。
迭代器应用的程序演示样例
1、使用迭代器和下标改变vector的内容
这个非常easy,请看代码。
#include <iostream>
#include <string>
#include <vector>
int print_int_vector(std::vector<int> ivec)
{
for(std::vector<int>::size_type ix =0, j = 0; ix != ivec.size(); ++ix, ++j)
{
std::cout<<ivec[ix]<<" "; //加空格!
}
std::cout<<std::endl;
return 0;
}
int main()
{
std::vector<int> ivec(10, 68); // empty vector
print_int_vector(ivec);
// reset all the elements in ivec to 0
/*
// 使用下标
for (std::vector<int>::size_type ix = 0; ix != ivec.size(); ++ix)
{
ivec[ix] = 0;
}
*/
// equivalent loop using iterators to reset all the elements in ivec to 0
for (std::vector<int>::iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
*iter = 0; // set element to which iter refers to 0
print_int_vector(ivec);
return 0;
}
2、tuple功能的实现【不可变性】
const_iterator类型仅仅能用于读取容器内元素。但不能改变其值。
当我们对普通 iterator 类型解引用时,得到对某个元素的非 const。而假设我们对 const_iterator 类型解引用时。则能够得
到一个指向 const 对象的引用),如同不论什么常量一样,该对象不能进行重写。
假设使用const_itreator进行重写,编译时会报错!
使用 const_iterator 类型时,我们能够得到一个迭代器,它自身的值能够改变。但不能用来改变其所指向的元素的值。
weixin_38577378
- 粉丝: 4
- 资源: 894
上传资源 快速赚钱
- 我的内容管理 收起
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
会员权益专享
最新资源
- zigbee-cluster-library-specification
- JSBSim Reference Manual
- c++校园超市商品信息管理系统课程设计说明书(含源代码) (2).pdf
- 建筑供配电系统相关课件.pptx
- 企业管理规章制度及管理模式.doc
- vb打开摄像头.doc
- 云计算-可信计算中认证协议改进方案.pdf
- [详细完整版]单片机编程4.ppt
- c语言常用算法.pdf
- c++经典程序代码大全.pdf
- 单片机数字时钟资料.doc
- 11项目管理前沿1.0.pptx
- 基于ssm的“魅力”繁峙宣传网站的设计与实现论文.doc
- 智慧交通综合解决方案.pptx
- 建筑防潮设计-PowerPointPresentati.pptx
- SPC统计过程控制程序.pptx
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0