【C++STL标准库】迭代器

这篇具有很好参考价值的文章主要介绍了【C++STL标准库】迭代器。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

优点:
代码高复用性
功能强大
性能高效
开源,可以跨平台

代码分支:
HP STL (第一个C++版本)
P.H.Plauger STL(VS)
Rouge Wave STL(C++ Builder)
STLport
SGI STL(GCC)

STL组件:
迭代器(iterator)
容器(Cobrainer)数组,链表…
算法(algorithm)排序…
仿函数(functor)
适配器(asaoter)
空间适配器(allocator)

迭代器
如何两个函数变成一个函数,实现代码的复用(模板)
迭代器的种数“
输入迭代器:只能是右值,只读 =, == ,!= ,++i ,i++
输出迭代器:只能是左值,只写=, == ,!= ,++i ,i++
前向迭代器:可读可写=, == ,!= ,++i ,i++
双向迭代器:可读可写=, == ,!= ,++i ,i++。–i,i–
随机访问迭代器:可读可写=, == ,!= ,++p ,p++。–p,p–,p+i,p-i,p[i],p<p1,p>p1,+=,-=
存在包含关系,只有输出迭代器是独立的,==一层一层向上包含

迭代器:

#include <iostream>
#include <iterator>

int main() {
	std::iterator<std::output_iterator_tag, int> obj;
	std::cout << typeid(obj).name() << std::endl;
	//迭代器的类型
	std::cout << typeid(std::iterator<std::input_iterator_tag, char>::iterator_category).name() << std::endl;
	//迭代器指向的真实的值的类型
	std::cout << typeid(std::iterator<std::input_iterator_tag, char>::value_type).name() << std::endl;
	//迭代器指向的真实类型的指针
	std::cout << typeid(std::iterator < std::input_iterator_tag, char>::pointer).name() << std::endl;
	//迭代器指向的真实类型的引用
	std::cout << typeid(std::iterator<std::input_iterator_tag, char>::reference).name() << std::endl;
	//迭代器指向的指针之间的差值
	std::cout << typeid(std::iterator<std::input_iterator_tag, char>::difference_type).name() << std::endl;
	int arr[] = { 1,2,3,4,5,6,7,8,9 };
	std::iterator<std::input_iterator_tag, int>::value_type a = arr[0];
	std::iterator<std::input_iterator_tag, int>::value_type b = arr[8];
	//std::cout << a << "\t" << b << "\t";
	std::iterator<std::input_iterator_tag, int>::pointer c = &a;
	std::iterator<std::input_iterator_tag, int>::pointer d = &a + 4;
	std::cout << a << std::endl;
	std::cout << b << std::endl;
	std::cout << c << std::endl;
	std::cout << d << std::endl;
	std::iterator<std::input_iterator_tag, int>::difference_type e = d - c ;
	std::cout << e << std::endl;
	return 0;
}

如果发现文章中有错误,还请大家指出来,我会非常虚心地学习,我们一起进步!!!文章来源地址https://www.toymoban.com/news/detail-607357.html

到了这里,关于【C++STL标准库】迭代器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++迭代器(STL迭代器)iterator详解

    要访问顺序容器和关联容器中的元素,需要通过“迭代器(iterator)”进行。迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素,通过迭代器就可以读写它指向的元素。从这一点上看,迭代器和指针类似。 迭代器按照定义方式分

    2024年02月03日
    浏览(45)
  • 【STL】模拟实现反向迭代器

    目录 1. 读源码 2. 搭建框架  3. 迭代器的操作 operator*()  operator-() operator++() operator--() operator!=() 4. 实现 list 的反向迭代器 5. 实现 vector 的反向迭代器 6. 源码分享 写在最后: 我们之前实现的 vector,list 好像都只实现了他们的正向迭代器,那有正向, 会有反向迭代器这种东西吗

    2024年02月13日
    浏览(41)
  • 【C++】STL反向迭代器模拟实现,迭代器适配器,迭代器类型简单介绍

    本篇主要讲反向迭代器的模拟实现。 能够加深各位对泛型的理解。 前面我那篇string介绍里面已经提到过反向迭代器是啥了,如果点进来的同学还不知道,可以看看:[string介绍](https://blog.csdn.net/m0_62782700/article/details/130796914? spm=1001.2014.3001.5501) 迭代器,可以在不暴露底层实现细

    2024年02月16日
    浏览(46)
  • STL之list模拟实现(反向迭代器讲解以及迭代器失效)

    这次是关于list的模拟实现的代码,先看看下面的代码: 上面是list的代码,其底层是一个带头双向循环的链表,实现的方法就不说了,相信大家已经都会了,然后自己实心的list我没有写析构函数等,这个也很简单,循环利用成员函数中的删除函数就可以。 先来说说个人认为

    2024年02月11日
    浏览(42)
  • C++ [STL容器反向迭代器]

    本文已收录至《C++语言》专栏! 作者:ARMCSKGT 我们知道STL大部分容器都有迭代器,迭代器又分为正向迭代器和反向迭代器,对于正向迭代器以及实现前面我们已经了解了不少,而反向迭代器的设计思想是 适配器模式 ,本节我们介绍反向迭代器的实现! 适配器是把一个类的接

    2024年02月11日
    浏览(58)
  • 【c++手撕STL】之迭代器

    在C++ STL (Standard Template Library,标准模板库)中,迭代器是一个非常重要的组成部分。迭代器像是一个指针,负责在容器的元素之间移动,并且能够访问到容器的元素。 C++ STL 提供了几种类型的迭代器,每种迭代器都有它独特的功能和特性: 输入迭代器(Input Iterators) :只读不

    2024年02月12日
    浏览(38)
  • 【C++】STL——反向迭代器的模拟实现:迭代器适配器

    反向迭代器的使用相信大家都已经比较熟悉了,那我们这篇文章具体讲什么呢? 🆗,这篇文章我们重点来讲一下 反向迭代器的模拟实现 。 那为什么我们之前不和正向迭代器放在一块讲呢?为什么要等到我们讲完了容器适配器再来讲反向迭代器的模拟实现呢? 那这个问题我

    2024年02月08日
    浏览(41)
  • C++ STL学习之【反向迭代器】

    ✨个人主页: 北 海 🎉所属专栏: C++修行之路 🎊每篇一句: 图片来源 A year from now you may wish you had started today. 明年今日,你会希望此时此刻的自己已经开始行动了。 适配器模式是 STL 中的重要组成部分,在上一篇文章中我们学习了 容器适配器 的相关知识,即 stack 与 queu

    2023年04月25日
    浏览(48)
  • C++ stl迭代器的理解

    首先,stl采用了泛型编程,分成了容器和算法,容器和算法之间的桥梁是迭代器,迭代器的作用是可以让算法不区分容器来作用在数据上。 迭代器本质上是指针,原有类型(比如int,double等)的指针也可以是迭代器,那如何让代码区分开他们呢? 我们可以把自定义的迭代器包

    2024年02月15日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包