、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、今天看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)容器采用迭代器访问及下标访问的效率详细对比,附详细代码及测试结果