迭代器与指针的差别:
迭代器:
(1) 迭代器不是指针, 是类模板, 表现的像指针. 他只是模拟了指针的一些功能, 通过重载了指针的一些操作符,->,*,++ -- 等封装了指针, 是一个 "可遍历 STL( Standard Template Library) 容器内全部或部分元素" 的对象, 本质是封装了原生指针, 是指针概念的一种提升 (lift), 提供了比指针更高级的行为, 相当于一种智能指针, 他可以根据不同类型的数据结构来实现不同的 ++,-- 等操作;
(2) 迭代器返回的是对象引用而不是对象的值, 所以 cout 只能输出迭代器使用 * 取值后的值 而不能直接输出其自身.
(3) 在设计模式中有一种模式叫迭代器模式, 简单来说就是提供一种方法, 在不需要暴露某个容器的内部表现形式情况下, 使之能依次访问该容器中的各个元素, 这种设计思维在 STL 中得到了广泛的应用, 是 STL 的关键所在, 通过迭代器, 容器和算法 http://blog.csdn.net/gogokongyin/article/details/51178378 可以有机的粘合在一起, 只要对算法给予不同的迭代器, 就可以对不同容器进行相同的操作.
- ite=find(vec.begin(),vec.end(),88);
- vec.insert(ite,2,77); // 迭代器标记的位置前, 插入数据;
- cout<<*ite<<endl; // 会崩溃, 因为迭代器在使用后就释放了,*ite 的时候就找不到它的地址了;
注: 迭代器在使用后就释放了, 不能再继续使用, 但是指针可以!!
- cout<<*iter (ok) cout<<iter (no!!!!!!!error)
- cout<<p<<*p (都 OK)
指针:
指针能指向函数而迭代器不行, 迭代器只能指向容器;
指针是迭代器的一种. 指针只能用于某些特定的容器; 迭代器是指针的抽象和泛化. 所以, 指针满足迭代器的一切要求.
总之, 指针和迭代器是有很大差别的, 虽然他们表现的行为相似, 但是本质是不一样的! 一个是类模板, 一个是存放一个家伙的地址的指针变量.
来源: http://www.bubuko.com/infodetail-2671527.html