簡體   English   中英

std :: list <> :: splice使迭代器無效。什么道理呢?

[英]std::list<>::splice invalidates iterators. Rationale?

我想知道使std::list<>::splice使參與拼接到新容器的子序列的迭代器無效的原因是什么。 這看起來有點不合邏輯,特別是考慮到標准的std::container::swap規范。 根據語言標准, std::container::swap不會使任何迭代器無效。 這是一個非常合理的實用規范。 但是,我會說std::list<>::splice也會從迭代器保留行為中受益匪淺。

我理解可能存在一些基於迭代器可達性等概念的純學術考慮因素。但同時splice是一個std::list -specific操作,這意味着為它提供一個定制的規范可能不會一般來說,對STL設計造成嚴重的概念性損害。

那是什么? 它是否會使std::list一些實際實現失效或過於復雜,我無法識別?

在C ++ 11中, splice不會使迭代器無效,而是使它們引用*this容器中的相應元素。 這一切都在23.3.5.5中描述。

如果容器有自定義的, 不相等(不兼容)的分配器 ,你就無法交換指針,你別無選擇,只能真正復制元素。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM