C++ Vector的iterator,自增操作++与+1的区别?怎么样理解

C++语言 码拜 5年前 (2016-04-27) 961次浏览
今天小弟看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返回的迭代器再–的话,调试模式下一般会被截断,而指针完全合法。

10

指针是一种特殊的变量,它专门用来存放另一变量的地址,而迭代器只是参考了指针的特性进行设计的一种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()的下一位。
你还是没怎么理解自增自减和指针的使用啊,加油吧

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C++ Vector的iterator,自增操作++与+1的区别?怎么样理解
喜欢 (0)
[1034331897@qq.com]
分享 (0)