今天小弟看c++ premier时候,看到swap两个同类型的顺序容器,迭代器不会失效。
回来验证了下,发现果然如书上所说,但是验证过程中发现另一个问题。
代码如下:
回来验证了下,发现果然如书上所说,但是验证过程中发现另一个问题。
代码如下:
#include <iostream> #include<vector> using namespace std; using std::vector; int main() { vector<int> v1{ 0, 1 }; vector<int> v2{ 2, 3 }; auto p1 = v1.begin(); auto p2 = p1++; auto p3 = v2.begin(); auto p4 = p3++; cout << *p1 <<" " <<*p2<<" "<< *p3 <<" "<<*p4<< endl; //cout << *(v1.begin()) << " " << *(v2.begin()) << endl; system("pause"); return 0; }
输出结果为 1 0 3 2;
表示有一些困惑,*p2=1可以理解,不太清除为何*p1=0,++使p1指向了第二个数,不太清楚逻辑,换句话说迭代器是不是和指针比较相似?
解决方案
5
原因是指针太强大了,迭代器限制了一下功能,方便代码的编写,还能查错。
例如begin返回的迭代器再–的话,调试模式下一般会被截断,而指针完全合法。
例如begin返回的迭代器再–的话,调试模式下一般会被截断,而指针完全合法。
10
指针是一种特殊的变量,它专门用来存放另一变量的地址,而迭代器只是参考了指针的特性进行设计的一种STL接口。
笔者曾在网上看到这样一种说法:迭代器是广义指针,而指针满足全部迭代器要求。迭代器是STL算法的接口,而指针是迭代器,因此STL算法可以使用指针来对基于指针的非STL容器进行操作。
笔者曾在网上看到这样一种说法:迭代器是广义指针,而指针满足全部迭代器要求。迭代器是STL算法的接口,而指针是迭代器,因此STL算法可以使用指针来对基于指针的非STL容器进行操作。
5
哪里不能理解,++后,p1指向了第二个元素,也就是1
5
迭代器定义的就是一个指针,利用指针的移动从而访问容器中的元素。
oh my god!
本人发现你的问题了,问题不是处在迭代器,而是++上。
你原来用
auto p1 = v1.begin();
auto p2 = p1++;
p2指向了原来p1指向的位置,原因是现在p1++=p1,然后p1++后,p1指向了v1.begin()的下一位。
你还是没怎么理解自增自减和指针的使用啊,加油吧
oh my god!
本人发现你的问题了,问题不是处在迭代器,而是++上。
你原来用
auto p1 = v1.begin();
auto p2 = p1++;
p2指向了原来p1指向的位置,原因是现在p1++=p1,然后p1++后,p1指向了v1.begin()的下一位。
你还是没怎么理解自增自减和指针的使用啊,加油吧