发布日期:2018-03-26
为什么使用迭代器而不是数组索引?+ 查看更多
为什么使用迭代器而不是数组索引?
+ 查看更多
发布日期:2018-02-26 14:27
分类:CPlusPlus
浏览次数:138
采取以下两行代码:
for (int i = 0; i < some_vector.size(); i++) { //do stuff }和这种:
for (some_iterator = some_vector.begin(); some_iterator != some_vector.end(); some_iterator++) { //do stuff }我被告知,第二种方式是首选。为什么是这样?
回答:
第一种形式只有在vector.size()是一个快速操作时才有效。 这对于向量是正确的,但不是列表。 另外,你打算在循环体内做什么? 如果你打算访问元素,如
T elem = some_vector[i];那么你假定容器定义了operator [](std :: size_t)。 同样,这对于向量是正确的,但不是对于其他容器。
迭代器的使用使您更接近容器独立性。你不做有关随机存取能力或快速size()操作的假设 ,只有容器有迭代器的能力。
你可以通过使用标准算法进一步增强你的代码。 根据你想要实现的是什么,你可以选择使用std :: for_each(),std :: transform()等等。 通过使用标准算法而不是显式循环,你可以避免一切从头开始。 你的代码可能更有效(给定正确的算法),正确和可重用。