2010-12-11 38 views
11

在我目前正在實現的算法中,我需要操作struct T的std :: list。 T保存對T的另一個實例的引用,但此引用也可以是「未分配」。 起初,我想用一個指針來保存這個引用,但是使用迭代器可以更容易地從列表中移除。迭代器等價於空指針?

我的問題是:如何用我的迭代器表示等價於空指針?

我閱讀的一般解決方案是使用myList.end(),但在我的情況下,我需要測試迭代器是否爲「null」或不是,我可以添加或刪除元素到列表之間的時間我存儲的迭代器,當我從列表中移除它...我應該使迭代器指向包含「null」元素的已知列表嗎?還是有更優雅的解決方案?

回答

15

根據this(由我強調):

相比其他鹼基序列 容器(矢量和雙端隊列),列出 是最有效的容器在比 其他一些位置做 插入 序列的開始或結束,並且與這些不同,全部爲 先前獲得的迭代器和 引用在 插入後仍然有效,並且參考相同的他們之前提到的個元素。

同樣的情況也適用於刪除(引用刪除元素的迭代器明顯例外變爲無效)。所以是的,獲得end()將始終指向相同的「無效」元素,應該是安全的使用。

+0

好的,太棒了!我有一種感覺,end()將是一個「規則的例外」,並且它會代表你將在列表中的下一個元素push_back ... – Mikarnage 2010-12-11 23:28:47

+0

不,那STL比那更聰明。 :) – suszterpatt 2010-12-11 23:31:22

+0

我很好奇:有誰知道這是否在'標準'以及? – sje397 2010-12-11 23:32:13