迭代器
迭代器的基本概念:
1.迭代器是一种遍历容器元素的数据类型。C++迭代器Interator就是一个指向某种STL对象的泛型指针。通过该指针可以简单方便地遍历所有元素。
2.迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。
3.迭代器提供一些基本操作符:、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致*。不同之处在于,迭代器是个所谓的复杂的指针,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型号却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。
来源自:https://www.baidu.com
迭代器的定义与初始化:
1.初始化:
每种容器都定义了自己的迭代器类型,如vector:
vector<int>::iterator ores; //定义一个名为ores的变量
2.迭代器的使用:
vector<int> rec;
vector<int>::iterator iter1=rec.bengin();
vector<int>::iterator iter2=rec.end();
3.迭代器中的操作:
- *ores:解引用,返回迭代器所指向元素的引用
- ++ores,– -ores:迭代器从一个元素移动下一个元素;不管迭代器里面数据结构咋样,都不影响运算符++,–的操作
4.迭代器的范围:
一个迭代器范围由一对迭代器表示,这里的迭代器区间是左闭合区间[begin,end),从begin开始,但是不包含end。如果begin与end相等,那么范围为空,如果begin和end不等,那么范围至少包含一个元素。
程序实例:
String类:
#include<iostream>
#include<string>
class Iterator
{
public:
Iterator(String* ps, int idx)
:pstr(ps), index(idx)
{}
bool operator!=(const Iterator rhs)
{
return index != rhs.index;
}
const Iterator operator++(int)
{
const Iterator tmp(*this);
index++;
return tmp;
}
Iterator& operator++()
{
index++;
return *this;
}
char& operator*();
private:
String* pstr;
int index;
};
char& Iterator::operator*()
{
return (*pstr)[index];
}
class String
{
public:
typedef Iterator iterator;
String(char* ptr)
{
mptr = new char[strlen(ptr) + 1]();
strcpy_s(mptr, strlen(ptr) + 1, ptr);
}
String(const String& rhs)
{
mptr = new char[strlen(rhs.mptr) + 1]();
strcpy_s(mptr, strlen(rhs.mptr) + 1, rhs.mptr);
}
String& operator=(const String& rhs)
{
if (this != &rhs)
{
delete[] mptr;
mptr = new char[strlen(rhs.mptr) + 1]();
strcpy_s(mptr, strlen(rhs.mptr) + 1, rhs.mptr);
}
return *this;
}
~String()
{
delete[] mptr;
mptr = NULL;
}
iterator begin()
{
return iterator(this, 0);
}
iterator end()
{
return iterator(this, strlen(mptr));
}
char& operator[](int index)
{
return mptr[index];
}
private:
char* mptr;
};
int main()
{
int arr[] = { 53, 46, 546, 8, 70, 4 };
int len = sizeof(arr) / sizeof(arr[0]);
std::vector<int> vec(arr, arr+len);
std::vector<int>::iterator it = vec.begin();
while (it != vec.end())
{
std::cout << *it << " ";
it++;
}
std::cout << std::endl;
return 0;
}
更多请看:
http://c.biancheng.net/view/338.html
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)