当前位置: 首页 > wzjs >正文

网站建设环境搭建心得体会49图库下浏览器

网站建设环境搭建心得体会,49图库下浏览器,太原有网站工程公司吗,星速浏览器迭代器是C中连接容器与算法的关键抽象,通过统一的接口实现高效、灵活的数据操作。理解迭代器的分类、操作、失效机制及适配器,是编写健壮STL代码的基础。 一、迭代器的定义 迭代器是一种对象,它提供了一种访问容器元素的方式,而无…

        迭代器是C++中连接容器与算法的关键抽象,通过统一的接口实现高效、灵活的数据操作。理解迭代器的分类、操作、失效机制及适配器,是编写健壮STL代码的基础。

一、迭代器的定义

        迭代器是一种对象,它提供了一种访问容器元素的方式,而无需暴露容器的内部实现。迭代器的行为类似于指针,但它是一个更高层次的抽象,支持多种容器类型(如数组、链表、树等)。
核心作用

  • 提供统一接口遍历容器,无论容器类型如何。

  • 实现算法与容器的解耦,使算法可以通过迭代器操作容器。

  • 最重要的一点是迭代器是左闭右开区间,即最左边能取到,但是最右边取不到,换成数组也是一样的。


二、迭代器的分类

迭代器按功能分为五类(从弱到强):

类型功能描述示例容器/迭代器
输入迭代器只读,单次遍历(只能向前)istream_iterator
输出迭代器只写,单次遍历ostream_iterator
前向迭代器可读写,支持多次向前遍历forward_list的迭代器
双向迭代器可向前或向后遍历(++--listsetmap
随机访问迭代器支持任意跳跃访问(+n-n<[]等),时间复杂度为O(1)vectordequearray

三、迭代器的运算符

迭代器通过运算符重载实现其功能。不同类别的迭代器支持的运算符不同:

运算符功能描述支持迭代器类型
*iter解引用,获取迭代器指向元素的引用除输出迭代器外的所有类型
iter->member访问元素的成员(等价于(*iter).member输入/前向/双向/随机访问
++iter / iter++移动到下一个元素(前向移动)所有类型(除纯输出迭代器)
--iter / iter--移动到上一个元素(反向移动)双向/随机访问
iter1 == iter2判断两个迭代器是否指向同一位置所有类型
iter1 != iter2判断两个迭代器是否指向不同位置所有类型
iter + n / iter - n向前或向后移动n个位置(随机访问)随机访问
iter[n]访问距离当前迭代器n个位置的元素(等价于*(iter + n)随机访问
<><=>=比较两个迭代器的位置顺序随机访问

四、支持偏移量的迭代器

  1. 支持偏移量的迭代器

    • 只有随机访问迭代器支持直接加上或减去偏移量(如it + 5it - 3)。

    • 典型容器:std::vectorstd::dequestd::array、原生数组。

  2. 不支持偏移量的迭代器

    • 双向迭代器(如std::liststd::setstd::map)和前向迭代器(如std::forward_list)不支持直接加上偏移量。

    • 可以使用std::advancestd::nextstd::prev来移动迭代器。

示例代码

#include <iostream>
#include <vector>
#include <list>
#include <iterator>  // 包含std::advanceint main() {// 示例1:随机访问迭代器std::vector<int> vec = {10, 20, 30, 40, 50};auto vit = vec.begin();vit = vit + 3;  // 支持偏移量std::cout << *vit << "\n";  // 输出: 40// 示例2:双向迭代器std::list<int> lst = {1, 2, 3, 4, 5};auto lit = lst.begin();std::advance(lit, 2);  // 使用std::advance移动迭代器std::cout << *lit << "\n";  // 输出: 3return 0;
}

五、迭代器适配器

迭代器适配器是对现有迭代器的封装,提供额外的功能:

  1. 反向迭代器

    • 从容器的末尾向开头遍历。

      std::vector<int> vec = {1, 2, 3, 4};
      for (auto rit = vec.rbegin(); rit != vec.rend(); ++rit) {std::cout << *rit << " ";  // 输出: 4 3 2 1
      }
  2. 插入迭代器

    • back_inserter:向容器尾部插入元素。

    • front_inserter:向容器头部插入元素。

    • inserter:向指定位置插入元素。

      std::vector<int> dest;
      std::copy(vec.begin(), vec.end(), std::back_inserter(dest));

六、迭代器失效问题(特别注意)

某些容器操作可能导致迭代器失效:

  • 序列容器(如vectordeque

    • 插入/删除元素可能使所有迭代器失效(内存重新分配)。

  • 链表容器(如list

    • 插入不会使迭代器失效。

    • 删除仅使被删除元素的迭代器失效。

  • 关联容器(如mapset

    • 插入不会失效。

    • 删除仅使被删除元素的迭代器失效。

示例:删除vector中的偶数元素

std::vector<int> vec = {1, 2, 3, 4, 5};
for (auto it = vec.begin(); it != vec.end();) {if (*it % 2 == 0) {it = vec.erase(it); // erase返回下一个有效迭代器} else {++it;}
}

七、迭代器的使用

  1. 获取迭代器

    • begin():指向第一个元素。

    • end():指向最后一个元素的下一个位置(“尾后”位置)。

    • cbegin()cend():常量迭代器。

    • rbegin()rend():反向迭代器。

  2. 遍历容器

    std::vector<int> vec = {1, 2, 3};
    for (auto it = vec.begin(); it != vec.end(); ++it) {std::cout << *it << " ";
    }
  3. 基于范围的for循环(C++11):

    for (const auto& val : vec) {std::cout << val << " ";
    }

八、迭代器的操作

  1. 遍历:使用++--*等运算符。

  2. 比较:使用==!=<>等运算符。

  3. 移动:使用std::advancestd::nextstd::prev

  4. 插入/删除:使用inserterase等容器方法。


文章转载自:

http://KxWzFqEM.wLsrd.cn
http://LpG9pVGO.wLsrd.cn
http://FBHZsamT.wLsrd.cn
http://SW38SZgy.wLsrd.cn
http://7gLCk91v.wLsrd.cn
http://a0gBRDFp.wLsrd.cn
http://lEFQqFaT.wLsrd.cn
http://ryG7sxt3.wLsrd.cn
http://RvmM8KYU.wLsrd.cn
http://uG3t8hQx.wLsrd.cn
http://4AO3pWog.wLsrd.cn
http://eUiJXe7t.wLsrd.cn
http://JTOGUGhX.wLsrd.cn
http://Y7qNk30Z.wLsrd.cn
http://9QW6VqhX.wLsrd.cn
http://SFYXgiqP.wLsrd.cn
http://LGNtYkZr.wLsrd.cn
http://uphZcyqa.wLsrd.cn
http://SHzFgAVr.wLsrd.cn
http://lwFCJbHW.wLsrd.cn
http://mVHEAIvu.wLsrd.cn
http://Dz40ko50.wLsrd.cn
http://mMlwI9nd.wLsrd.cn
http://dyNR8NJ7.wLsrd.cn
http://O6Jq1gLE.wLsrd.cn
http://9tQC0TzZ.wLsrd.cn
http://bbEvMxF7.wLsrd.cn
http://IYist0Z5.wLsrd.cn
http://azxfgWcM.wLsrd.cn
http://mjthhSQk.wLsrd.cn
http://www.dtcms.com/wzjs/636392.html

相关文章:

  • 信用门户网站建设观摩网站开发电子商务
  • 做的网站打开慢宠物网站模板下载
  • 资源付费网站制作百度免费安装下载
  • 搜索网站排行企业管理咨询有限公司是做什么的
  • 网站建设与网络推广的关系一般做网站需要的js有哪些
  • 哪里卖网站域名那个网站都有做莱的图片
  • easyui做网站去掉wordpress.org
  • 律师网站建设推荐手机网站建设机构
  • 网站做互动coreldraw
  • 室内设计网站排行榜前十名知乎什么叫前端什么叫后端
  • 分享几个x站好用的关键词开发手机app游戏公司
  • 谷歌网站站长指南WordPress主题Cute主题
  • wordpress 缓存腾讯cos贵州百度seo整站优化
  • 海口房产网站建设seo排名优化是什么
  • php网站制作常用代码网页制作与网站开发从入门到精通 豆瓣
  • 河池企业网站开发公司昆明网站建设技术托管
  • 想找个人建网站商业网站需要多少钱
  • 网站运维工作内容天然气公司的网站应该怎么做
  • 动漫网站开发 sh框架66郑州网站建设
  • 1万元可以注册公司吗wordpress 优化数据
  • 怎样做一个购物型的网站开发一套小程序多少钱
  • 做ppt的素材免费网站建网站备案需要的材料
  • 网站的留言怎么做有哪些app软件开发公司
  • 东莞网站网络推广公司ps做网站浏览器预览
  • 网站备案到期了怎么办公司网站建设的工具
  • 个人个案网站 类型网站加入我们页面
  • 南京做中英文网站设计三一国际网站设计
  • 个人网站建站系统长沙旅游攻略景点必去
  • 客户端网站建设文档青岛门户网站建设
  • wordpress 中文工单抖音seo优化系统招商