關於map erase的使用說明

2021-07-07 04:42:35 字數 1228 閱讀 7775

c++ 中經常使用的容器類有vector,list,map。其中vector和list的erase都是返回迭代器,但是map就比較不一樣。

map是從模板類繼承來的,不同的c++版本標準其erase函式也不同:

c++98

void erase (iterator position);

size_type erase (const key_type& k);

void erase (iterator first, iterator last);

c++11

iterator  erase (const_iterator position);

size_type erase (const key_type& k);

iterator erase (const_iterator first, const_iterator last);

關於c++版本

要想知道c++的標準(版本)需要檢視編譯器的文件。目前大多數編譯器都是用的c++03 standard。

當在迴圈體中使用map::erase語句時,為了能夠在任何機器上編譯通過,並且能夠跨平台(windows、linux),正確的寫法是:

map

l_map;

map::iterator l_iter = l_map.begin();

map::iterator l_itererase;

while (l_iter != l_map.end())

也有人提出了這樣的寫法:

map

l_map;

map::iterator l_iter = l_map.begin();

while (l_iter != l_map.end())

這個寫法據某牛人說,只適合引數入棧順序是從右向左的方式,引數入棧順序是和具體編譯器實現相關的。也就是,如果不幸遇到引數入棧順序是從左向右的,上面的寫法就不行了。

上面是牛人的說法,但是我想不通的是,只有乙個引數的時候,引數入棧順序應該沒有影響啊?

關於函式引數中帶++,–運算子的文章請見:

i++和++i作為引數時的編譯器處理方式分析~

關於SO REUSEADDR的使用說明

參考windows 網路程式設計技術 1.可以對乙個埠進行多次繫結,一般這個是不支援使用的 2.對於監聽套接字,比較特殊。如果你定義了so reuseaddr,並且讓兩個套接字在同乙個埠上進行接聽,那麼對於由誰來accept,就會出現歧義。如果你定義個so reuseaddr,只定義乙個套接字在乙個...

關於SafeArray的使用說明

猛料資料,首先介紹safearray使用,在介紹safearray中的結構。看完該節文章,safearray的陌生感一掃而去。safearray 在ado程式設計中經常使用。它的主要目的是用於automation中的陣列型引數的傳遞。因為在網路環境中,陣列是不能直接傳遞的,而必須將其包裝成 safe...

關於SO REUSEADDR的使用說明

1.可以對乙個埠進行多次繫結,一般這個是不支援使用的 2.對於監聽套接字,比較特殊。如果你定義了so reuseaddr,並且讓兩個套接字在同乙個埠上進行接聽,那麼對於由誰來accept,就會出現歧 義。如果你定義個so reuseaddr,只定義乙個套接字在乙個埠上進行監聽,如果伺服器出現意外而導...