C++:线上课程1_26(STL链表)

1. STL链表

1.1 链表

迭代器可以对容器进行访问,不需要了解容器内部结构
代码如下(示例):

#ifndef YHP_LIST_H
#define YHP_LIST_H
namespace yhp
{
template<class _Ty>
class list
{
private:
	struct Node;//声明结构体
	typedef struct _Node* _Nodeptr;//声明结构体类型指针
	struct _Node
	{
		_Nodeptr _Prev, _Next;//前驱,后继
		_Ty _Value;//数据域
	};
	struct _Acc;
	struct _Acc
	{
		typedef struct _Node*& _Nodepref;//指针的引用类型
		typedef _Ty& _Vref;//值引用类型
		static _Vref _Value(_Nodeptr _P)
		{
			return (*_P)._Value;
		}
		static _Nodepref _Pref(_Nodeptr _P)
		{
			return (*_P)._Pref;
		}
		static _Nodepref _Next(_Nodeptr _P)
		{
			return(*_P)._Next;
		}
	};
public:
	typedef _Ty          value_type;//值类型
	typedef _Ty&         reference;//引用类型
	typedef const Ty&    const_reference;//常引用类型
	typedef _Ty*         pointer;//指针类型
	typedef const _Ty*   const_pointer;//常指针类型
public:
	class iterator;//普通迭代器
	class const_iterator;//常性迭代器
	class const_iterator//能够对每个节点进行依次迭代,但是不能修改每个节点的值
	{
		
	};
	class iterator
	{
	private:
		_Nodeptr _Ptr;
	public:
		iterator(Nodeptr _P) :Ptr(_P) {}
		operator*()//取得当前节点数据
		{
			return _Acc::_Value(_Ptr);
		}
		pointer operator->() const
		{
			return &_Acc::_Value(_Ptr);
			//return &**this;迭代器迭代的值的引用
		}
		operator++();
		operator++(int);
		operator--();
		operator--(int);
	};
};
}
#endif

1.2 迭代器示例

迭代器特点:抽象,泛化,归一,特化
代码如下(示例):

#include"stdio.h"
#include<iostream>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#include<vector>
#include<map>
#include<list>
#include<thread>
#include<mutex>
#include<typeinfo>
#include<map>
#include<queue>
#include<functional>
using namespace std;
int main()
{
	vector<int> ar = { 12,23,34,45,56,67,78,89,90,100 };
	list<int> br = { 12,23,34,45,56,67,78,89,90,100 };
	map<int, int> amap = { {1,2},{3,4},{5,6},{7,8},{9,10} };
	for (vector<int>::iterator it = ar.begin(); it != ar.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (list<int>::iterator it = br.begin(); it != br.end(); ++it)
	{
		cout << *it << " ";
	}
	cout << endl;
	for (map<int,int>::iterator it = amap.begin(); it !=amap.end(); ++it)
	{
		cout << it->first << " " << it->second << endl;
	}
	return 0;
}

运行结果:
在这里插入图片描述


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值