C++ 迭代器的按下标访问

、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、今天看vector的back()源码,发现这样一段

return _My_data._Mylast[-1];

这里_Mylast和end()一样,是迭代器,那么我就想是否可以迭代器按下标访问其后的元素,于是尝试:

void test() {
	vector<int> intV = { 1,2,3 };
	vector<int>::iterator it = intV.begin();

	cout << "*it = " << *it << endl;
	cout << "it[0] = " << it[0] << endl;

	cout << "*(it+1) = " << *(it+1) << endl;
	cout << "it[1] = " << it[1] << endl;
	if (*it == it[0]) {//==比较的是首地址
		cout << "相等" << endl;
	}
	else {
		cout << "不相等" << endl;
	}
0.
	if (*(it+1) == it[1]) {//==比较的是首地址
		cout << "相等" << endl;
	}
	else {
		cout << "不相等" << endl;
	}
}

结果如下:
在这里插入图片描述
结果显而易见,但我认为it[i]这种写法不太推荐使用,因为肯定是*(it+i)访问元素更符合C++编程风格。

另外补充:
在C++中,我们更倾向于使用迭代器而不是使用下标操作,因为标准库为每一种标准容器(如vector)定义了一种迭代器类型,而只有少数容器(如 vector)支持下标操作访问容器元素。
C++程序员习惯性地使用 !=,其原因和他们更愿意使用迭代器而非下标的原因一样:因为这种编程风格在标准库提供的所有容器上都有效。但是当数据量过于庞大时,使用下标访问可以大幅度减少时间,详见
C++(STL)容器采用迭代器访问及下标访问的效率详细对比,附详细代码及测试结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值