初识迭代器

一、为什么用迭代器

要访问string和容器中的元素,可以通过下标运算符实现。但是只有少数容器实现了下标访问,所以需要一个更为通用的方式来访问,就引入了迭代器(iterator)。从这一点上看,迭代器和指针类似。

二、迭代器的运算符

操作符名称 作用
*iter 返回迭代器所指向元素的引用
iter->men 解引用iter并获取men成员
++iter 令iter指示容器的下一个元素
--iter 令iter指示容器的上一个元素
iter1 == iter2 判断迭代器是否相等,如果指向的是同一个元素或者都为尾后迭代器(end之后为空),则相等
iter1 != iter2 否则不相等

举例使用

将string对象中小写改为大写,碰见第一个空白或者字符串完毕后停止。

int main()
{
    string s{"some string"};
    for(auto it = s.begin(); it != s.end() && !isspace(*it); it++)
    {
        *it = toupper(*it);
    }
    return 0;
}

三、迭代器的定义

1、正向迭代器

容器类名::iterator 迭代器名;

2、常量正向迭代器

容器类名::const_iterator 迭代器名;

四、迭代器的类型

使用Iterator和const_iterator来表示迭代器的类型

vector<int>::iterator it;   
vector<int>::const_iterator it2;    //it2只能读元素

五、begin 和 end 运算符

begin和end具体类型取决于对象是否是常量

vector<int> a;
const vector<int> b;

auto it = a.begin();    //it类型为vector<int>::iterator 
auto it2 = b.end();     //it2类型为vector<int>::const_iterator

为了只读我们可以使用cbegin 和 cend

vector<int> a;
auto it = a.cbegin();    //it类型为vector<int>::const_iterator 

六、迭代器失效

以后

七、迭代器运算

运算 作用
iter + n 前移n个元素,或者指向尾元素的下一个位置
iter - n 后移n个元素,或者指向尾元素的下一个位置
iter1 += n 同上,结果保存回iter1
iter1 -= n 同上,将结果保存回iter1
iter1 - iter2 得到两个迭代器的距离,iter1和iter2必须是同一个容器的元素,或者是尾元素的下一位置
> >= < <= 判断迭代器的位置,在后面的大

diffenernce_type是带符号整数,可以保存两个迭代器相减的距离

    vector<int> a;
    a.push_back(10);
    a.push_back(9);
    vector<int>::iterator it;
    auto len = a.begin() - a.end();
    //auto是difference_type类型
posted @ 2024-05-11 10:32  baobaobashi  阅读(4)  评论(0编辑  收藏  举报