C++ 迭代器 Iterator

提供了对对象的间接访问。

所有标准库容器都可以使用迭代器(eg, string, vector)。

迭代器的类型

1. iterator: 读写。

2. const_iterator: 只读。

注:如果使用迭代器的容器对象是常量(const),那么只能使用const_interator。

       无法确定返回值类型,通常使用auto接收。

迭代器的基础使用

1. begin运算符和end运算符

    返回的迭代器类型由使用的容器对象决定,如果对象是常量,则返回const_iterator;

                                                                         如果不是,则返回iterator。

2.  cbegin运算符和cend运算符

     返回值const_iterator.

#include <vector>

using std::vector;

int main(){
    vector<int> vec = {1, 2, 3, 4};

    auto it1 = vec.begin();
    auto it2 = vec.end();

    auto it3 = vec.cbegin();
    auto it4 = vec.cend();
}

迭代器运算符

1. 返回迭代器所指元素的引用

2. 解引用迭代器

3. 移动到下一元素

4. 移动到上一元素

5. 判断迭代器是否相等

#include <vector>

using std::vector

int main(){
    vector<int> vec = {1, 2, 3};
    auto it = vec.begin();
    auto it2 = ++it;
    //1.迭代器的引用
    *it;
    //2.解引用it,并且获取it所指元素的成员men,等价于(*it).mem
    it->mem;
    //3.移动到下一元素
    ++it;
    //4.移动到上一元素
    --it;
    //5.判断两个迭代器是否相等,当且仅当他们指向同一元素,或,指向同一容器的尾后元素
    it == it2;
    it != it2;
}

练习题

1. 假设用一个名为text的字符串向量存放文本文件中的数据,其中元素或者是一句话或者是一个用于表示段落分隔的空字符串。输出text中的第一段并全都改成大写形式。

#include <iostream>
#include <string>
#include <vector>
#include <cctype>

using std::vector;
using std::string;
using std::cin;
using std::cout;
using std::endl;

int main() {
  //声明并初始化text
  vector<string> text = {"HelloWord", "HappyNewYear","Next","","End"};
  /*
   *外层循环遍历text,直到遇到空字符
   *内层循环遍历元素string字符串,将每个字符转换为大写
  */
  for(auto it = text.begin(); it != text.end() && !it->empty(); ++it){
    for(auto c = (*it).begin(); c != (*it).end(); ++c){
      *c = toupper(*c);
    }
    cout << *it << endl;
  }
}

2. 编写一段程序,创建一个含有10个整数的vector对象,然后使用迭代器将所有元素的值都变成原来的两倍。输出vector对象的内容,检验程序是否正确。

int main() {
  vector<int> number(10,6);
  for(auto it = number.begin(); it != number.end(); ++it){
    *it = *it * 2;
    cout << *it << endl;
  }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值