为什么我们要编写 v.erase(v.begin(), v.begin()+3)
?
为什么它不被定义为 erase(int, int)
,这样你就可以编写 v.erase(0,2)
,然后实现会处理 begin()
的问题呢?
接口container.erase(iterator, iterator)
更一般化,适用于没有索引的容器,例如std::list
。如果您编写模板且不知道代码将在哪个容器上运行,则这是一个优点。
最初的设计旨在尽可能普遍化,而迭代器比索引更通用。设计师们本可以为vector
添加额外的基于索引的重载,但却决定不这样做。
<algorithm>
函数,让它们返回索引将会非常受限制。 - Lightness Races in Orbitptr = ptr->next
)可以访问链表。迭代器是这些指针的泛化。std::list
,并且container.erase(it0, it1)
仍然可以正常工作,而无需修改代码。