2015-04-18 120 views
1
std::forward_list<int> foo {1,2,3,4,5}; 

for(int i:foo) 
{ 
    if(i==1) foo.push_front(0); 

    std::cout << i << std::endl; 
} 

我已經在Visual Studio和coliru上進行過測試,並且從我對設計單鏈表的理解中,應該沒有問題。但是,我對forward_list的內部知識甚少,或者是一般的stl容器和迭代器,所以我想要求確保:std :: forward_list :: push_front迭代

上面的代碼安全嗎?或者我援引UB,並且恰好在我的小測試中沒有啓動啓示錄。

+1

插入forward_list不會使迭代器無效。 – 0x499602D2

+0

我會VTC這是我的迭代失效常見問題的一個騙局,但它缺少'std :: forward_list'條目。 –

+0

@LightningRacisinObrit你可以把我鏈接到那個FAQ條目。我似乎無法在您的個人資料中找到它。 – andyb

回答

2

cppreference.com

添加,刪除和列表中移動的元素,或在 幾個列表,並不能否定目前指 到列表中的其他元素的迭代器。然而,當從列表中刪除相應元素 (通過erase_after)時,引用元素的迭代器或引用 將失效。