算法:问题之解法也
算法分为质变算法和非质变算法:
①质变算法:是指运算过程中会更改区间内的元素的内容,例如拷贝,替换,删除等。
②非质变算法:是指运算过程中不会更改区间内的元素的内容,例如查找,计数,遍历,寻找极值等。
迭代器:容器和算法之间的胶合剂
提供一种方法,便之能够依序寻访某个容器所含的各个元素,而又无需暴露该容器的内部表示方式。
每个容器都有自己专属的迭代器
迭代器使用非常类似于指针,初学阶段我们可以先理解迭代器为指针
Array(定长数组)
头文件:<array>
array里面大概是这样:
template<class T,size_t size>
class MyArray
{
public:
MyArray()
{
memory = new T[size];
}
~MyArray()
{
delete[] memory;
}
protected:
T* memory;
public:
T* begin()
{
return memory+0;//第一个元素
}
T* end()
{
return memory+size;//最后一个位置
}
//类中类
//类的对象模仿指针的行为
class iterator
{
public:
iterator(T* pMove=nullptr):pMove(pMove){}
void operator=(T* pMove)//重载=
{
this->pMove=pMove;
}
bool operator!=(T* pMove)//重载!=
{
return this->pMove!=pMove;
}
iterator operator++(int)//重载++
{
this->pMove++;
return *this
}
T operator*()//重载*
{
return pMove[0];
}
protected:
T* pMove;
}
};
void test()
{
MyArray<int, 3>arr1;
for(int i=0;i<3;i++)
{
arr1[i]=i;
}
MyArray<int,3>::iterator iter;
for(iter=arr1.begin();iter!=arr1.end();iter++)
{
cout<<*iter;
}
cout<<endl;
}