迭代器:
类似于指针类型,迭代器也提供了对对象的间接访问,就迭代器而言,其对象是容器中的元素或者string对象中的字符。使用迭代器可以访问某个元素,迭代器也能从一个元素移动到另外一个元素,迭代器有有效和无效之分,这一点和指针差不多
有效的迭代器或者指向某个元素,或者指向容器中尾元素的下一位置
使用迭代器和指针不一样的是,获取迭代器不是使用取地址符,有迭代器的类型同时拥有返回迭代器的成员,譬如这些类型都拥有名为begin和end的成员,
其中begin成员负责返回指向第一个元素(或第一个字符)的迭代器;end成员则负责返回指向容器“尾元素的下一位置”的迭代器,也就是说,
该迭代器指示的是容器的一个本不存在的“尾后元素”,这样的迭代器没什么意义,仅是个标记而已,表示我们处理完了容器中的所有元素
end成员返回的迭代器常被称为尾后迭代器或者简称为尾迭代器,特殊情况下,如果容器为空,那么begin和end返回的是同一个迭代器
举例:
std::vector<int> data;
data.push_back(1);
data.push_front(2);
data.push_back(3);
data.push_front(4);
std::vector<int>::iterator iter;
for (iter = data.begin(); iter != data.end(); iter++)
{
int value = *iter; // 对iter进行解引用
*iter = 5; // 也可以对iter进行赋值
}
C++中STL使用迭代器的原因:
1. 通过迭代器访问容器,可以避免许多错误,同时还能隐藏容器的具体实现
2. 迭代器可以保证对所有容器的基本遍历方式都是一样的,实现算法时若需要遍历,则使用迭代器,则可以不用关注容器的具体类型,实现数据结构和算法的分离。
3. 迭代器本身有很多优点,可以弥补C++的不足,比如它的iterator_category