1. 程式人生 > >為什麽對string調用swap會導致叠代器失效

為什麽對string調用swap會導致叠代器失效

利用 htm string 對象 www. href 字符串長度 調用 針對

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

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

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

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

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

即C++會自動把較短的字符串放到對象內部,較長的字符串放到動態內存。

假如 std::string 用 SSO 實現,而待交換的兩個對象中的字符串恰好一長一短,則原先指向短字符串中的叠代器會全部失效。

轉載自:https://www.cnblogs.com/ll-10/p/9633968.html

為什麽對string調用swap會導致叠代器失效