為什么對string調用swap會導致迭代器失效


一般來說,swap操作將容器內容交換不會導致容器的指針、引用、迭代器失效。

但當容器類型為array和string時除外。

原因在於:SSO  (Short String Optimization 指C++針對短字符串的優化。)

  默認情況下,C++的std::string都是存儲在heap中,導致訪問std::string需要經過一次尋址過程,速度較慢,並且這種實現的空間局部性不好,對cache的利用較低。

  很多string的字符串長度很小,這個時候,我們可以把字符串存儲到棧上,從而不需要進行內存分配,優化創建速度,並且訪問棧上數據的局部性很好,速度比較快。

即C++會自動把較短的字符串放到對象內部,較長的字符串放到動態內存。
假如 std::string 用 SSO 實現,而待交換的兩個對象中的字符串恰好一長一短,則原先指向短字符串中的迭代器會全部失效。




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM