一、迭代器的概念
(1)迭代器类似于指针类型,它也提供了对对象的间接访问
(2)指针是C语言中就有的东西,而迭代器是C++中才有的
(3)迭代器提供一个对容器对象或者string对象访问的方法,并且定义了容器范围
二、关于迭代器
和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员,比如,容器都有的成员begin和end,其中begin成员负责返回指向容器第一个元素的迭代器,如:auto b = v.begin();end成员则负责返回指向容器的尾元素的下一个位置的迭代器,也就是说指向的是容器的一个本不存在的尾部。
如果容器为空,则begin和end返回的是同一个迭代器,都是尾后迭代器。
代码示例:
#include <iostream>
#include <vector>
using namespace std;
template<typename T>
class Vector
{
public:
Vector()
{
maxsize = 5;
arr = new T[maxsize];
size = 0;
}
bool IsEmpty()
{
return size == 0;
}
bool IsFull()
{
return size == maxsize;
}
/*
1.容器不满
插入数据
2.容器满
扩容
*/
void Resize()
{
T* tmp = new T[maxsize * 2];
for (int i = 0; i < size; ++i)
{
tmp[i] = arr[i];
}
delete[]arr;
arr = tmp;
maxsize *= 2;
}
void Push_back(T val)
{
if (IsFull())
{
Resize();
}
arr[size++] = val;
}
void Pop_back()
{
if (IsEmpty())
{
throw exception("Vector is Empty!");
}
size--;
}
T Back()
{
return arr[size - 1];
}
T& operator [](int index)
{
return arr[index];
}
void Show()
{
for (int i = 0; i < size; ++i)
{
cout << arr[i] << " ";
}
cout << endl;
}
~Vector()
{
delete[] arr;
arr = NULL;
}
private:
T* arr;
int size;//当前有效长度
int maxsize;//最大长度
};
/*
Vector List Deque
*/
template<typename T,template<typename R>
class Container = Vector>
class Stack
{
public:
void push(T val)
{
v.Push_back(val);
}
void pop()
{
v.Pop_back();
}
T top()
{
return v.Back();
}
bool IsEmpty()
{
return v.IsEmpty();
}
void Show()
{
v.Show();
}
private:
Container<T> v;
};
int main()
{
Stack<int> st1;
for(int i = 0;i < 10;i++)
{
st1.push(i + 1);
}
st1.Show();
Stack<int, Vector> st2;
return 0;
}
运行结果:
才疏学浅 写的比较浅 以后再来更新