用粉色做网站主题色,网站 搭建 亚洲服务器,免费电子版个人简历模板,网站 制作 报价这里写目录标题 1. list的介绍及使用1.1 list的介绍1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2. list的模拟实现2.1 list的反向迭代器 1. list的介绍及使用
1.1 list的介绍
list的… 这里写目录标题 1. list的介绍及使用1.1 list的介绍1.2.1 list的构造1.2.2 list iterator的使用1.2.3 list capacity1.2.4 list element access1.2.5 list modifiers1.2.6 list的迭代器失效 2. list的模拟实现2.1 list的反向迭代器 1. list的介绍及使用
1.1 list的介绍
list的文档介绍
1.2.1 list的构造 1.2.2 list iterator的使用 此处大家可暂时将迭代器理解成一个指针该指针指向list中的某个节点。 1.2.3 list capacity 1.2.4 list element access 1.2.5 list modifiers 1.2.6 list的迭代器失效 前面说过此处大家可将迭代器暂时理解成类似于指针迭代器失效即迭代器所指向的节点的无效即该节点被删除了。因为list的底层结构为带头结点的双向循环链表因此在list中进行插入时是不会导致list的迭代器失效的只有在删除时才会失效并且失效的只是指向被删除节点的迭代器其他迭代器不会受到影响。 void TestListIterator1()
{
int array[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
listint l(array, arraysizeof(array)/sizeof(array[0]));
auto it l.begin();
while (it ! l.end())
{
// erase()函数执行后it所指向的节点已被删除因此it无效在下一次使用it时必须先给
其赋值
l.erase(it);
it;
}
}
// 改正
void TestListIterator()
{
int array[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, 0 };
listint l(array, arraysizeof(array)/sizeof(array[0]));
auto it l.begin();
while (it ! l.end())
{
l.erase(it); // it l.erase(it);
}
}2. list的模拟实现
2.1 list的反向迭代器
通过前面例子知道反向迭代器的就是正向迭代器的–反向迭代器的–就是正向迭代器的因此反向迭代器的实现可以借助正向迭代器即反向迭代器内部可以包含一个正向迭代器对正向迭代器的接口进行包装即可。
templateclass Iterator
class ReverseListIterator
{
// 注意此处typename的作用是明确告诉编译器Ref是Iterator类中的类型而不是静态
成员变量
// 否则编译器编译时就不知道Ref是Iterator中的类型还是静态成员变量
// 因为静态成员变量也是按照 类名::静态成员变量名 的方式访问的
public:
typedef typename Iterator::Ref Ref;
typedef typename Iterator::Ptr Ptr;
typedef ReverseListIteratorIterator Self;
public:
//
// 构造
ReverseListIterator(Iterator it): _it(it){}
//
// 具有指针类似行为
Ref operator*(){
Iterator temp(_it);
--temp;
return *temp;
}
Ptr operator-(){ return (operator*());}
//
// 迭代器支持移动
Self operator(){
--_it;
return *this;
}
Self operator(int){
Self temp(*this);
--_it;
return temp;
}
Self operator--(){
_it;
return *this;
}
Self operator--(int)
{
Self temp(*this);
_it;
return temp;
}
//
// 迭代器支持比较
bool operator!(const Self l)const{ return _it ! l._it;}
bool operator(const Self l)const{ return _it ! l._it;}
Iterator _it;
};