为什么我们必须写v.erase(v.begin(), v.begin()+3)
?
为什么不将其定义为erase(int, int)
,以便您可以编写v.erase(0,2)
并且实现会处理begin()
?
答案 0 :(得分:6)
接口DoSomething.doIt(new DoSomething.MyListener() {
Override
public void onDone(String result) {
lblHelloWorld.setText(result);
}
});
更通用,适用于没有索引的容器,如container.erase(iterator, iterator)
。如果您编写模板并且不确切地知道代码要处理哪个容器,这是一个优势。
原始设计旨在尽可能通用,迭代器比索引更通用。设计者可能为std::list
添加了额外的基于索引的重载,但决定不这样做。
答案 1 :(得分:1)
在STL中,迭代器是唯一提供对STL容器的一般访问的实体。
可以通过指针和索引访问数组数据结构。迭代器是这些索引/指针的泛化
可以使用移动指针(la <TabControl ItemsSource="{Binding myObservableCollection}">
<TabControl.ItemContainerStyle>
<Style TargetType="TabItem">
<Setter Property="Visibility" Value="Collapsed" />
</Style>
</TabControl.ItemContainerStyle>
<TabControl.ContentTemplate>
<DataTemplate>
<TextBlock>content...</TextBlock>
</DataTemplate>
</TabControl.ContentTemplate>
</TabControl>
)访问链接列表。迭代器是对这些的概括。
Trees和HashTables需要特殊的迭代器类,它封装了迭代这些数据结构的逻辑。
正如您所看到的,迭代器是一般类型,它允许您对数据结构执行常见操作(如迭代,删除等),无论它们的底层实现如何。
这样,您可以重构代码以使用ptr = ptr->next
,std::list
仍可正常工作而无需修改代码。