您的位置:首页 > 文旅 > 美景 > 小熊源码网_买一个商标大概要多少钱_怎么做一个网页_seo薪酬水平

小熊源码网_买一个商标大概要多少钱_怎么做一个网页_seo薪酬水平

2025/7/2 18:49:52 来源:https://blog.csdn.net/qq_63152518/article/details/145711262  浏览:    关键词:小熊源码网_买一个商标大概要多少钱_怎么做一个网页_seo薪酬水平
小熊源码网_买一个商标大概要多少钱_怎么做一个网页_seo薪酬水平

目录

前言:什么是迭代器(Iterator)

1. 迭代器的作用

2. 迭代器的分类

2.1 输入迭代器(Input Iterator)

2.2 输出迭代器(Output Iterator)

2.3 前向迭代器(Forward Iterator)

2.4双向迭代器(Bidirectional Iterator)

3. 迭代器的基本用法

3.1 获取迭代器

3.2 遍历容器

3.3 反向迭代器

4. 迭代器适配器

4.1 插入迭代器

4.2 流迭代器


前言:什么是迭代器(Iterator)

迭代器是一种用于遍历容器(如数组、链表、集合等)的对象,类似于“指针”,但比指针更安全、功能更强。它主要用于 C++ STL(标准模板库) 以及其他支持迭代的编程环境。

1. 迭代器的作用

  • 迭代器是 遍历容器的工具,类似指针,但更安全、更强大。
  • 主要分为 输入、输出、前向、双向、随机访问 五种类型。
  • 不同的容器 支持不同类型的迭代器(如 vector 支持随机访问,list 仅支持双向)。
  • 常见用法
    • begin() / end() 获取迭代器。
    • ++it / --it 移动迭代器。
    • rbegin() / rend() 反向遍历。
    • std::back_inserter / std::inserter 适配器用于插入。

2. 迭代器的分类

C++ STL 迭代器主要分为 五类可以理解为“指针的不同级别

2.1 输入迭代器(Input Iterator)

  • 特点:只能从头到尾 单向读取 数据,不支持写入,也不能后退。
  • 适用场景:适用于 只读 操作,比如从 cin 读取输入数据。

2.2 输出迭代器(Output Iterator)

  • 特点:只能单向写入数据,不能读取,也不能后退。
  • 适用场景:适用于 只写 操作,比如向 cout 输出数据,或者 ofstream 写入文件。

2.3 前向迭代器(Forward Iterator)

  • 特点
    • 既能 读取,也能 写入 数据。
    • 只能前进,不能后退。
    • 适用于链表(forward_list)。
    • 代码示例:
std::forward_list<int> lst = {1, 2, 3};
std::forward_list<int>::iterator it = lst.begin();
std::cout << *it;  // 输出 1

2.4双向迭代器(Bidirectional Iterator)

  • 特点
    • 既能 读取,也能 写入 数据。
    • 可以前进,也可以后退
    • 适用于 双向链表(list)和某些 STL 容器
std::list<int> lst = {1, 2, 3};
std::list<int>::iterator it = lst.begin();
it++; // 前进
it--; // 后退
std::cout << *it;

 2.5 随机访问迭代器(Random Access Iterator)

  • 特点
    • 像指针一样可以随意访问 任意位置。
    • 适用于 数组(vector)、deque 支持随机访问的数据结构。
    • 可以使用 +-[] 操作符,如 it + 2 直接跳过两个元素。
std::vector<int> vec = {10, 20, 30, 40};
std::vector<int>::iterator it = vec.begin();
std::cout << *(it + 2);  // 访问 vec[2],输出 30
/*-------------------第二个例子-------------------------------------*/#include <iostream>
#include <vector>int main() {std::vector<int> vec = {100, 200, 300, 400, 500};std::vector<int>::iterator it = vec.begin();// 直接使用 [] 访问偏移位置std::cout << it[0] << std::endl; // 输出 100std::cout << it[2] << std::endl; // 输出 300std::cout << it[4] << std::endl; // 输出 500return 0;
}

3. 迭代器的基本用法

3.1 获取迭代器

C++ STL 提供了 begin()end() 方法,分别返回指向容器 第一个元素最后一个元素之后 的迭代

std::vector<int> vec = {1, 2, 3, 4, 5};
std::vector<int>::iterator it = vec.begin();  // 指向第一个元素
std::vector<int>::iterator endIt = vec.end(); // 指向超出最后一个元素的位置

注意end() 不指向最后一个元素,而是最后一个元素的“下一个位置”

3.2 遍历容器

使用迭代器遍历 vector

std::vector<int> vec = {10, 20, 30, 40};// 方式1:使用普通迭代器
for (std::vector<int>::iterator it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";
}// 方式2:使用 C++11 的 `auto`
for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";
}// 方式3:使用范围 `for` 循环(推荐)
for (int num : vec) {std::cout << num << " ";
}

3.3 反向迭代器

STL 容器提供 rbegin()rend() 来支持 反向遍历

std::vector<int> vec = {10, 20, 30, 40};
for (auto it = vec.rbegin(); it != vec.rend(); ++it) {std::cout << *it << " ";  // 输出 40 30 20 10
}

4. 迭代器适配器

C++ STL 还提供了一些特殊迭代器,适用于不同需求:

4.1 插入迭代器

  • std::back_inserter(container): 在容器 末尾 插入元素(适用于 vectorlist)。
  • std::front_inserter(container): 在容器 开头 插入元素(适用于 dequelist)。
  • std::inserter(container, it): 在 指定位置 插入元素。
std::vector<int> vec;
std::copy({1, 2, 3}, {4, 5, 6}, std::back_inserter(vec)); 
// vec 变为 {1, 2, 3, 4, 5, 6}

4.2 流迭代器

  • std::istream_iterator<T>(std::cin): 从输入流读取 数据。
  • std::ostream_iterator<T>(std::cout): 向输出流写入 数据。
std::istream_iterator<int> in(std::cin), eof;
std::vector<int> vec(in, eof);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com