![]() |
1
27
注意,通常向量的实现不会使用“int”作为索引/大小的类型。所以您的代码至少会引起编译器警告。 泛型迭代器增加了代码的通用性。 例如:
现在,假设您将向量更改为一个列表(因为在您的例子中,列表现在更好了)。您只需要更改typedef声明,然后重新编译代码。 如果您使用了基于索引的代码,那么就需要重新编写它。 通路迭代器应该被看作是一种超级指针。 它“指向”值(如果是映射,则指向键/值对)。 但它有方法移动到容器中的下一个项。或上一个。有些容器甚至提供随机访问(向量和deque)。 算法大多数STL算法都适用于迭代器或迭代器的范围(同样,由于泛型)。这里,您将无法使用索引。 |
![]() |
2
17
使用迭代器可以使代码对容器的实现不可知。如果容器的随机访问很便宜,那么性能方面就没有太大的差异。 但在很多情况下,你不知道情况是否如此。如果您尝试在链接列表上使用您的方法,例如,通过订阅,容器将不得不在每次迭代中遍历列表以找到您的元素。 因此,除非您确定对容器的随机访问是便宜的,否则请使用迭代器。 |
![]() |
3
2
如果使用迭代器作为函数的参数,则可以将其与所使用的“容器”类型分离。例如,您可以将函数的结果定向到控制台输出,而不是向量(下面的示例)。这个技巧对于减少类之间的耦合非常强大。松耦合类更容易测试。
|
![]() |
4
1
在您的示例中,对vecVector.size()的调用比使用迭代器效率低。迭代器本质上封装了您不必担心被迭代的容器的大小。此外,迭代器不必按顺序进行。它只需要以它认为合适的方式对下一个呼叫做出响应。 |
![]() |
5
1
首先,如果你把向量转化成一个列表,上面的内容就不再有效了。 迭代器允许您创建不需要知道所处理容器类型的函数模板。您甚至可以执行以下操作:
这是因为标准指针也是有效的迭代器。 戴夫 |
![]() |
6
1
迭代器主要是更高级别的抽象。
您的代码段假定容器可以被索引。这是真的
但是
此外,只有在经过测量和证明后,性能问题才是问题。 |
|
Julia · 矢量中相加为总和S的值的数量 2 年前 |
![]() |
apetrai · 我应该如何假设算法使用哪种迭代器类别? 2 年前 |
![]() |
Pratik · 不使用Java DeepCopy迭代器 6 年前 |
![]() |
PanDe · 将两个列表合并为一个Dict、Tuple 6 年前 |
![]() |
bisarch · 迭代哈希集并在每次迭代中删除多个元素 6 年前 |