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

淮安哪有专业做网站的公司搜索引擎网站有哪些

淮安哪有专业做网站的公司,搜索引擎网站有哪些,个人网站的设计与制作论文,网站的下载二维码怎么做目录 🚪什么是迭代器? 🔧 迭代器的本质 为什么不用普通数组或下标? STL容器的迭代器并不是共用一个类型! 迭代器的类型(Iterator Categories) 📦 常见容器的迭代器类型 ✅ 迭…

目录

🚪什么是迭代器?

🔧 迭代器的本质

为什么不用普通数组或下标?

STL容器的迭代器并不是共用一个类型!

迭代器的类型(Iterator Categories)

📦 常见容器的迭代器类型

✅ 迭代器最常用的动作

🚸 初学者推荐写法:使用 auto 和 范围for


🚪什么是迭代器?

迭代器 = “智能指针”,用来一个一个地访问容器中的元素

你可以想象迭代器像是容器中的“手指”或“光标”:

  • 指着某个元素

  • 可以向前走(甚至有些还能往后走)

  • 能取出或修改元素

 示例对比:用数组 vs 用迭代器

int arr[] = {10, 20, 30};
for (int i = 0; i < 3; i++) {std::cout << arr[i];
}

改成 vector + 迭代器写法: 

std::vector<int> v = {10, 20, 30};
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {std::cout << *it;
}
  • v.begin():返回指向第一个元素的迭代器

  • v.end():返回“超出最后一个元素的下一个位置”的迭代器

  • *it:表示取出当前指向的元素

  • ++it:移动到下一个元素

🔧 迭代器的本质

迭代器是一个类类型(不是基本类型)

虽然它看起来像指针(用 *it 解引用,用 ++it 移动),但它本质上是一个 C++ 类对象,封装了访问容器内部元素的逻辑。

🚩你可以这样理解:

指针迭代器
访问数组元素访问容器元素
*ptr 获取值*it 获取元素
是内建类型是类类型(有重载了 *, ++, == 等操作符)

🎓 举个例子看看类型:

std::vector<int> v = {1, 2, 3};
auto it = v.begin();
  • it 实际的类型是 std::vector<int>::iterator

  • 你可以打印:

std::cout << typeid(it).name() << std::endl;

输出可能是:__gnu_cxx::__normal_iterator<int*, std::vector<int>>

🔍 它是一个内部实现的类,封装了指针行为,但比裸指针更安全、更通用。


为什么不用普通数组或下标?

STL 有很多不同的容器:链表、哈希表、红黑树……
它们里面的元素并不一定支持下标 [],但每种容器都提供了“迭代器”接口,你可以统一方式遍历。

容器支持下标?支持迭代器?
vector
list
set
map

每个容器都有自己专属的迭代器类型,std::vector<T>::iterator  这种写法是访问这个类型的一种方式。

STL容器的迭代器并不是共用一个类型!

容器类型对应迭代器类型
std::vector<T>std::vector<T>::iterator
std::list<T>std::list<T>::iterator
std::set<T>std::set<T>::iterator
std::map<K,V>std::map<K,V>::iterator
std::vector<int>::iterator it;  // vector 的迭代器
std::list<double>::iterator it2;  // list 的迭代器

为什么不统一一个 iterator 类型呢?
👉 因为不同容器的内部结构不同(如数组 vs 链表 vs 红黑树),它们的迭代器行为也不同。比如:

  • vector 支持随机访问 (it + 3)

  • list 只支持前后移动(++it, --it

 

迭代器的类型(Iterator Categories)

STL 根据迭代器的能力,把迭代器分成 五类,从弱到强如下:

类型功能示例容器
InputIterator单向只读istream_iterator
OutputIterator单向只写ostream_iterator
ForwardIterator单向读写forward_list
BidirectionalIterator可双向移动list, set, map
RandomAccessIterator支持随机访问 it+n, it1-it2vector, deque, array

💡 STL 算法会根据迭代器的种类选择最优的操作方式。

 

📦 常见容器的迭代器类型

容器支持的迭代器类型
vector, deque, array随机访问迭代器(RandomAccessIterator)
list双向迭代器(BidirectionalIterator)
forward_list单向迭代器(ForwardIterator)
set, map, multimap, multiset双向迭代器(BidirectionalIterator)
unordered_map, unordered_set同样为双向迭代器

随机访问迭代器(vector): 

std::vector<int> v = {1, 2, 3, 4};
auto it = v.begin();
std::cout << *(it + 2);  // 输出:3

 双向迭代器(list):

std::list<int> l = {1, 2, 3};
auto it = l.end(); --it;
std::cout << *it;  // 输出:3

 单向迭代器(forward_list):

std::forward_list<int> fl = {1, 2, 3};
auto it = fl.begin();
++it;  // 可以前进,但不能后退


✅ 迭代器最常用的动作

操作含义
it = container.begin()取得起始位置的迭代器
it != container.end()判断是否结束
++it移动到下一个元素
*it获取当前指向的元素
std::vector<int> nums = {5, 10, 15};
for (auto it = nums.begin(); it != nums.end(); ++it) {std::cout << *it << " ";
}
操作说明
--it移动到上一个元素(双向或更强迭代器)
it == it2, it != it2比较两个迭代器
it + n, it - n随机访问(仅支持随机访问迭代器)
std::distance(it1, it2)两个迭代器之间的距离
std::advance(it, n)将迭代器移动 n 个位置(支持不同迭代器类型)

🚸 初学者推荐写法:使用 auto范围for

从 C++11 开始,可以让写法更简单!

✅ 用 auto 简化迭代器声明:

for (auto it = nums.begin(); it != nums.end(); ++it)

✅ 更简单的方法:范围for(推荐):

范围 for 是 C++11 引入的一种简洁写法,用于遍历容器或数组。它让你不需要写迭代器、不需要用下标,直接访问每一个元素。 

for (元素类型 变量名 : 容器) {// 使用变量名代表当前元素
}

传统写法(使用迭代器): 

std::vector<int> v = {1, 2, 3, 4};
for (std::vector<int>::iterator it = v.begin(); it != v.end(); ++it) {std::cout << *it << "\n";
}

 范围 for 写法:

std::vector<int> v = {1, 2, 3, 4};
for (int x : v) {std::cout << x << "\n";
}

 范围 for 背后的原理:

for (auto it = v.begin(); it != v.end(); ++it) {int x = *it;...
}

所以它仍然依赖迭代器,只不过帮你“自动写好了”。

http://www.dtcms.com/wzjs/345873.html

相关文章:

  • 简单网站后台模板深圳营销型网站
  • 什么网站可以做期刊封面网站推广的意义和方法
  • 内蒙古网站建设公司嘉兴seo外包平台
  • 广州哪里能拿到便宜烟草企业网站seo推广方案
  • 2017政府网站建设不足郑州seo优化顾问
  • 网站建设那个好seo标签优化
  • 网站更新维护怎么做东莞营销型网站建设
  • 网站开发 flex手机百度正式版
  • 江门门户网站软文营销代理
  • 兰州建设厅评职称网站互联网广告投放代理公司
  • 网站开发建设明细报价表谷歌官方网站首页
  • 建网站需要买服务器吗产品营销方案案例范文
  • 网业安全防护如何关闭学seo优化
  • 网站建设层级图开网店如何运营和推广
  • 个人网站怎么备案可以做哪些百度推广关键词匹配模式
  • 国外专卖模板的网站朝阳seo搜索引擎
  • 昆明网站建设网站cpc广告接单平台
  • 许昌网站建设汉狮怎么样广告投放平台排名
  • 找百度做的网站可以过户旺道seo推广
  • 做网站设计管理的专业深圳seo公司
  • 做公司中文网站需要注意什么网站策划书模板
  • 公司网站版面怎么设计技术培训机构排名前十
  • 怎么自己做网站空间网站运营seo实训总结
  • 网站开发 模版绑定顶级域名属于网络营销的特点是
  • 网站制作及实现点金推广优化公司
  • 网站产品链接怎么做的seo网站关键词优化方法
  • 公众号做微网站吗舆情报告范文
  • 全网通官方网站口碑营销的形式
  • wordpress 瀑布流布局海口seo计费
  • 金山石化网站建设手机优化专家下载