C++:STL迭代器

2023-05-16

11_23 STL迭代器

STL迭代器

顺序迭代器—遍历型迭代器
iterator 正向迭代器
reverse_iterator 反向迭代器

#include<iostream>
#include<vector>
using namespace std;

//函数模板,正向打印容器内元素
template<typename CON>
void show(CON& src)
{
	typename CON::iterator it = src.begin();
	for (; it != src.end(); it++)
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//函数模板,反向打印容器内元素
template<typename CON>
void show_reverse(CON& src)
{
	typename CON::reverse_iterator it = src.rbegin();//rbegin指向最后一个元素
	for (; it != src.rend(); it++)//rend指向第一个元素的前一个位置
	{
		cout << *it << "  ";
	}
	cout << endl;
}

int main()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}

	show(v1);
	show_reverse(v1);


	return 0;
}

在这里插入图片描述
const_iterator 常量正向迭代器
reverse_const_iterator 常量反向迭代器

#include<iostream>
#include<vector>
using namespace std;



//函数模板,正向打印容器内元素
template<typename CON>
void show(CON& src)
{
	typename CON::iterator it = src.begin();
	for (; it != src.end(); it++)
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//函数模板,反向打印容器内元素
template<typename CON>
void show_reverse(CON& src)
{
	typename CON::reverse_iterator it = src.rbegin();//rbegin指向最后一个元素
	for (; it != src.rend(); it++)//rend指向第一个元素的前一个位置
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//函数模板,常量正向打印容器内元素
template<typename CON>
void show_const(const CON& src)
{
	typename CON::const_iterator it = src.cbegin();
	for (; it != src.cend(); it++)
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//函数模板,常量反向打印容器内元素
template<typename CON>
void show_reverse_const(const CON& src)
{
	typename CON::const_reverse_iterator it = src.crbegin();//rbegin指向最后一个元素
	for (; it != src.crend(); it++)//rend指向第一个元素的前一个位置
	{
		cout << *it << "  ";
	}
	cout << endl;
}

int main()
{
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}

	show(v1);
	show_reverse(v1);

	const vector<int>v2(v1.begin(), v1.end());
	show_const(v2);
	show_reverse_const(v2);

	vector<int>::const_iterator  it2 = v2.cbegin();
	vector<int>::const_reverse_iterator it3 = v2.crbegin();
	

	return 0;
}

在这里插入图片描述

插入型迭代器
插入型迭代器是一个模板,模板需要指定类型容器,指定容器当中位置
inserter使用函数模板封装类对象模板的产生

insert_iterator 随机插入型迭代器 ----- insert
在这里插入图片描述

back_insert_iterator 后插型迭代器 ------ push_back();

list<int>list1;
	for (int i = 0; i < 10; i++)
	{
		list1.push_back(i);
	}
	front_insert_iterator<list<int>> it3(list1);

	auto it4 = front_inserter(list1);
	*it3 = 888;
	*it4 = 777;
	show(v2);

在这里插入图片描述

front_insert_iterator 前插型迭代器 ----- push_front

流迭代器


	//输出流迭代器
	ostream_iterator<int> ito(cout, "   ");
	for (int i = 0; i < 10; i++)
	{
		ito = i;
	}

在这里插入图片描述


	//输出流迭代器
	ostream_iterator<int> ito(cout, "   ");
	for (int i = 0; i < 10; i++)
	{
		ito = i;
	}
	cout << endl;

	Insert(list1.begin(), list1.end(), ito);//插入到ito中

在这里插入图片描述
auto函数:可以推断出插入的数据类型

#include<iostream>
#include<vector>
#include<iterator>
#include<list>
using namespace std;



//函数模板,正向打印容器内元素
template<typename CON>
void show(CON& src)
{
	typename CON::iterator it = src.begin();
	for (; it != src.end(); it++)
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//函数模板,反向打印容器内元素
template<typename CON>
void show_reverse(CON& src)
{
	typename CON::reverse_iterator it = src.rbegin();//rbegin指向最后一个元素
	for (; it != src.rend(); it++)//rend指向第一个元素的前一个位置
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//函数模板,常量正向打印容器内元素
template<typename CON>
void show_const(const CON& src)
{
	typename CON::const_iterator it = src.cbegin();
	for (; it != src.cend(); it++)
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//函数模板,常量反向打印容器内元素
template<typename CON>
void show_reverse_const(const CON& src)
{
	typename CON::const_reverse_iterator it = src.crbegin();//rbegin指向最后一个元素
	for (; it != src.crend(); it++)//rend指向第一个元素的前一个位置
	{
		cout << *it << "  ";
	}
	cout << endl;
}

//随机插入型迭代器 
template<typename INSERT_IT,typename IT>
void Insert(const IT first, const IT& last, INSERT_IT insert_it)
{
	IT tmp = first;
	for (; tmp != last; tmp++)
	{
		*insert_it = *tmp;
	}
}

//实现inserter:产生insert_iterator的对象,函数模板封装类模板对象的产生
template<typename CON>
insert_iterator<CON>minserter(CON& con, typename CON::iterator it)
{
	return insert_iterator<CON>(con, it);
}

//后插型迭代器
template<typename CON>
back_insert_iterator<vector<int>> mback_inserter(CON& con)
{
	return back_insert_iterator<vector<int>>(con);
}


int main()
{
	/*
	vector<int>v1;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}

	show(v1);
	show_reverse(v1);

	const vector<int>v2(v1.begin(), v1.end());
	show_const(v2);
	show_reverse_const(v2);

	vector<int>::const_iterator  it2 = v2.cbegin();
	vector<int>::const_reverse_iterator it3 = v2.crbegin();
	*/

	vector<int>v1;
	vector<int>v2;
	for (int i = 0; i < 10; i++)
	{
		v1.push_back(i);
	}

	insert_iterator<vector<int>> it(v2, v2.begin());//插入型迭代器
	for (int i = 0; i < 10; i++)
	{
		*it = i + 100;
	}
	show(v2);

	insert_iterator<vector<int>> it1(v2, v2.begin() + 1);
	Insert(v1.begin(), v1.end(), inserter(v2, v2.begin() + 1));
	show(v2);

	back_insert_iterator<vector<int>> it2(v2);
	*it2 = 999;
	Insert(v1.begin(), v1.begin() + 3, it2);
	show(v2);


	list<int>list1;
	for (int i = 0; i < 10; i++)
	{
		list1.push_back(i);
	}
	front_insert_iterator<list<int>> it3(list1);

	auto it4 = front_inserter(list1);
	*it3 = 888;
	*it4 = 777;
	show(v2);
	

	//输出流迭代器
	ostream_iterator<int> ito(cout, "   ");
	for (int i = 0; i < 10; i++)
	{
		ito = i;
	}
	cout << endl;

	Insert(list1.begin(), list1.end(), ito);//插入到ito中

	cout << endl;

	//输入流迭代器
	istream_iterator<int> iti(cin);
	int a;
	a = *iti;
	ito = a;


	return 0;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++:STL迭代器 的相关文章

随机推荐

  • ArduPilot飞控之Mission Planner模拟

    ArduPilot飞控之Mission Planner模拟 1 源由2 Mission Planner安装 amp 模拟2 1 安装Mission Planner2 2 Mission Planner模拟 3 注意事项3 1 界面语言设置3
  • Proteus进行单片机仿真(一)

    Proteus是一款可以进行单片机电路仿真的软件 xff0c 软件提供多种单片机的型号 xff0c 包含51 STM32 PIC MSP430 ardunio等常用的单片机系列 其提供各种常见的外围器件可以方便的搭建电路并进行仿真 xff0
  • docker部署prometheus

    1 prometheus简介 prometheus是由 SoundCloud 开源监控告警解决方案 xff0c 是云原生时代最火热的监控系统之一 详细功能可以参看官网文档 2 prometheus部署 本文主要讲述prometheus的部署
  • 经验分享 | 小白如何准备,才能找到Python工作?

    小白怎么当上Python程序员 xff1f 上一篇说到 xff0c 我用了2年的时间 xff0c 跑了n多个城市 xff0c 从一个法学院毕业的Python小白如愿以偿的成为了一个自己满意的Python程序员 从这段经历里 xff0c 我能
  • FPGA学习笔记(一)——Quartus使用、多路选择器设计

    大家好 xff0c 好久不见 这段时间一直在搞课题 xff0c 所以没有更新 刚刚结束毕设开题 xff0c 之前的研电赛也有了结果 开题和研电赛都拿了不错的成绩 xff0c 我还是比较满意的 xff08 笑 xff09 十一假期刚过 xff
  • FPGA学习笔记(二)——Modelsim仿真、testbench编写

    我的Modelsim Altera是在安装Quartus13 0时下载的 xff0c 里面会有选项 xff0c 安装初学者版本就可以 xff0c 在Quartus18 0里也可以使用 一 设置Quartus和Modelsim的关联路径 这样
  • FPGA学习笔记(四)——引脚分配、AC620开发板连接、测试程序

    现在我们要将程序下载AC620开发板上测试 一 引脚分配 1 基本知识 在没有按键按下的时候 xff0c 每个按键端输出的都是高电平 xff0c 当按键按下的时候 xff0c 被按下的 按键端会输出低电平 当FPGA输出低电平时 xff0c
  • FPGA学习笔记(六)——流水灯

    上篇博客讲了led控制 xff0c 实现了led闪烁 xff0c 那我们趁热打铁 xff0c 做一个补充实验 xff1a 设计流水灯 xff0c 让4个led灯按照流水的方式循环闪烁 这个实验是为了练习verilog中移位操作的使用方法 想
  • FPGA学习笔记(七)——定时器设计、蜂鸣器驱动、变音蜂鸣器

    这篇文章主要讲解两个知识点 xff1a 驱动蜂鸣器 xff08 定时器设计 xff09 变音蜂鸣器 xff08 层次化系统设计 xff09 定时器与计数器的区别不大 定时器 xff1a 核心单元本质上是个计数器 xff0c 设置一个定时值
  • FPGA学习笔记(八)——3-8译码器的设计与验证

    一 3 8译码器介绍 3 8译码器是三输入 xff0c 八输出 当输入信号按二进制方式的表示值为N时 xff0c 输出端标号为N的输出端输出高电平表示有信号产生 xff0c 而其它则为低电平表示无信号产生 因为三个输入端能产生的组合状态有八
  • 引入axios,写个ajax发送到 通过post发送给百度

    axios post 39 http www baidu com 39 then function response console log response data data catch function error ajax中的err
  • Git学习笔记(二)——Git的分支管理、储藏和标签

    分支管理 开始的时候 xff0c 只有一条主分支 xff0c 即master分支 xff0c master分支是一条线 xff0c git用master指向最新的提交 xff0c 再用HEAD指向master 创建 合并分支 创建新的分支时
  • 【SLAM学习笔记】12-ORB_SLAM3关键源码分析⑩ Optimizer(七)地图融合优化

    2021SC 64 SDUSC 目录 1 前言2 代码分析 1 前言 这一部分代码量巨大 xff0c 查阅了很多资料结合来看的代码 xff0c 将分为以下部分进行分析 单帧优化局部地图优化全局优化尺度与重力优化sim3优化地图回环优化地图融
  • 13个能快速开发android的经典项目

    正文 一 okhttp一个让网络请求更简单的框架 项目地址 https github com jeasonlzy okhttp OkGo 二 TwinklingRefreshLayout 下拉刷新和上拉加载的RefreshLayout 自带
  • Linux 编译C++程序的四种方法

    1 使用G 43 43 编译 你有一个test cpp文件 在终端输入 g 43 43 helloSLAM cpp 然后就会得到一个a out 文件 在终端输入 a out 就可以执行 在Linux系统下编译并执行C 43 43 程序 Jo
  • 基于TCP的多线程双向通信

    基于TCP的多线程双向通信 今天我们来简单实现一下TCP的双向通信 1 服务器端的搭建流程 1 先获取套接字 xff08 socket xff09 2 绑定套接字 bind xff0c 公布自己的网路信息 xff08 IP地址 xff0c
  • Linux网络编程----http

    Linux网络编程 http 面经 xff1a 基础知识http的请求方法http的应答方法服务器代码 xff1a 一 HTTP1 HTTP的概念2 HTTP的操作过程3 HTTP存在的问题 二 HTTPS1 HTTPS的概念2 HTTPS
  • C++进阶之路---STL---vector

    vector 一 xff1a vector简介二 vector的初始化方式三 vector的常见问题1 size 和capacity 的区别2 元素的构建方式3 访问容器内部元素的方式方式一 xff1a 方式二 xff1a error 有可
  • albumentations数据增强学习

    albumentations数据增强学习 96 96 文章目录 albumentations数据增强学习原图 xff1a CLAHE xff08 限制对比度自适应直方图均衡化 xff09 数据增强RandomRotate90 xff08 随
  • C++:STL迭代器

    11 23 STL迭代器 STL迭代器 顺序迭代器 遍历型迭代器 iterator 正向迭代器 reverse iterator 反向迭代器 span class token macro property span class token