C++STL迭代器

本文深入探讨C++STL中的迭代器概念,包括正向、反向、常正向和常反向迭代器的分类及辅助函数。此外,还介绍了Lambda表达式的用法和组成部分,以及仿函数在算法中的作用。同时,文章讨论了函数适配器和函数包装器的概念,阐述它们如何使函数调用更加灵活。
摘要由CSDN通过智能技术生成

目录

迭代器

Lambda表达式

仿函数

函数适配器

函数包装器


迭代器

  • 迭代器:其实就是一个类中类,通过运算符重载和类中类的对象遍历容器
  • 迭代器的分类:
  1. 正向迭代器:iterator
  • begin()
  • end()
  1. 反向迭代器:reverse_iterator
  • rbegin()
  • rend()
  1. 常正向迭代器:const_iterator
  • cbegin()
  • cend()
  1. 常反向迭代器:const_reverse_iterator
  • crbegin()
  • crend()
#include<iostream>
#include<array>
using namespace std;
template<class _Ty>
struct Node {
	_Ty data=0;
	Node<_Ty>* next;
	Node(_Ty data):data(data),next(nullptr){}
	Node(_Ty data,Node<_Ty>*next):data(data),next(next){}
};
template<class _Ty>
class MyList {
public:
	MyList() :frontNode(nullptr), tailNode(nullptr) { curSize = 0; }
	void push_front(_Ty data){
	if (curSize == 0)
	{
		frontNode  = new Node<_Ty>(data);
		tailNode =frontNode ;
	}
	else
	{
		frontNode = new Node<_Ty>(data, frontNode);
	}
	curSize++;
	}
	void printList() {
		Node<_Ty>* ptemp=frontNode;
		while (ptemp != nullptr) {
			cout << ptemp->data << "\t";
			ptemp = ptemp->next;
		}
	}
	void push_back(_Ty data) {
		if (curSize == 0) {

			frontNode = new Node<_Ty>(data);
			tailNode = frontNode;
		}
		else {	
			Node<_Ty>* newNode = new Node<_Ty>(data,nullptr);
			tailNode->next = newNode;
			tailNode = newNode;
		}
		curSize++;
	}
	Node<_Ty>* begin() { return frontNode; }
	Node<_Ty>* end() { return nullptr;//返回end的下一个位置,即nullptr }
	class iterator {
	public:
		bool operator!=(Node<_Ty>* pmove)
		{ 
			return this->pmove != pmove; 
		}
		iterator operator++(int) 
		{
		pmove = pmove->next;
		return iterator(pmove); 
		}
		_Ty operator*() { return pmove->data; }
		iterator(Node<_Ty>*pmove=nullptr):pmove(pmove){}
		iterator(const iterator&object):pmove(object.pmove){}
	protected:
		Node<_Ty>* pmove;//迭代器的实质是通过这个数据成员访问链表
	};
protected:
	Node<_Ty>* frontNode;
	Node<_Ty>* tailNode;
	int curSize;
};
void testIterator() {
	array<int, 8>Array = { 1,2,3,4,5,6,7,8 };
	//正向迭代器
	auto iter = Array.begin();
	for (; iter != Array.end(); iter++) 
	{
		cout << *iter << "\t";
	}
	cout 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值