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,只定義乙個套接字在乙個埠上進行監聽,如果伺服器出現意外而導...