青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆 - 505  文章 - 1034  trackbacks - 0
<2007年10月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910


子曾經(jīng)曰過:編程無他,唯手熟爾!

常用鏈接

留言簿(94)

隨筆分類(649)

隨筆檔案(505)

相冊

BCB

Crytek

  • crymod
  • Crytek's Offical Modding Portal

Game Industry

OGRE

other

Programmers

Qt

WOW Stuff

搜索

  •  

積分與排名

  • 積分 - 921906
  • 排名 - 14

最新隨筆

最新評論

閱讀排行榜

評論排行榜


不多說了,看代碼
#include <iostream>
#include 
<string>
#include 
<map>
#include 
<algorithm>

template
<class _Ty>
struct stPrintElement
    : 
public std::unary_function<_Ty, void>
{
    
void operator()( const _Ty& Arg )
    {
        std::cout 
<< Arg.second << std::endl;
    }
};


int _tmain(int argc, _TCHAR* argv[])
{
    typedef std::map
<int, std::string> tMap;
    typedef tMap::iterator tMapIterator;

    tMap MyMap;

    std::
string str = "I'm the first!";
    MyMap.insert(tMap::value_type(
0, str));

    str 
= "I'm the second!";
    MyMap.insert(tMap::value_type(
1, str));

    std::for_each(MyMap.begin(), MyMap.end(), stPrintElement
< std::pair<int, std::string> >());

    
for (tMapIterator it = MyMap.begin(); it != MyMap.end();)
    {
        
if (it->second == str)
        {
            MyMap.erase(it
++); /// Really smart! :-)
        }
        
else
        {
            
++it;
        }
    }

    std::cout 
<< "After erase: " << std::endl;
    std::for_each(MyMap.begin(), MyMap.end(), stPrintElement
< std::pair<int, std::string> >());

    
return 0;
}

后綴++解決了問題,哈哈
這個在《c++標準程序庫》里有介紹,一直沒有用到這個,今天用到了

2007/04/05 重構:
看了小明同志的回復后,優(yōu)化下
#include <iostream>
#include 
<string>
#include 
<map>
#include 
<algorithm>
#include 
<vector>

template
<class TElement>
struct stPrintPairContainerElement
    : 
public std::unary_function<TElement, void>
{
    
void operator()( const TElement& elem )
    {
        std::cout 
<< elem.first
            
<< " : "
            
<< elem.second 
            
<< std::endl;
    }
};

template
<class TElement>
struct stPrintNoPairContainerElement
    : 
public std::unary_function<TElement, void>
{
    
void operator()( const TElement& elem ) const
    {
        std::cout 
<< elem << std::endl;
    }
};

template
<class TLeft, class TRight>
struct stPred
    : 
public std::binary_function<TLeft, TRight, bool>
{
    
bool operator()( const TLeft& left , const TRight& right) const /// 最后這個const不加不行
    {
        
return left.second == right;
    }
};

/// for vector, deque 
template <class TContainer, class TElement> 
inline 
void vector_erase(TContainer & container, TElement const& elem) 

    container.erase( std::remove(container.begin(), container.end(), elem), container.end() ); 


template 
<class TContainer, class TPred> 
inline 
void vector_erase_if(TContainer & container, TPred pred) 

    container.erase( std::remove_if(container.begin(), container.end(), pred), container.end() ); 


/// for list, set, map 
template <class TContainer, class TElement> 
inline
void list_erase(TContainer & container, TElement const& elem) 

    
for (TContainer::iterator it = container.begin(); it != container.end();)
    {
        
if (*it == elem)
        {
            container.erase(it
++);
        }
        
else
        {
            
++it;
        }
    }


template 
<class TContainer, class TPred> 
inline
void list_erase_if(TContainer & container, TPred pred) 

    
for (TContainer::iterator it = container.begin(); it != container.end();)
    {
        
if (pred(*it))
        {
            container.erase(it
++);
        }
        
else
        {
            
++it;
        }
    }


int _tmain(int argc, _TCHAR* argv[])
{
    typedef std::map
<int, std::string> tMap;
    typedef tMap::iterator tMapIterator;

    tMap MyMap;

    std::
string str = "I'm the first!";
    MyMap.insert(tMap::value_type(
0, str));

    str 
= "I'm the second!";
    MyMap.insert(tMap::value_type(
1, str));

    std::for_each(MyMap.begin(), MyMap.end(), stPrintPairContainerElement
< std::pair<int, std::string> >());

    list_erase_if( MyMap, std::bind2nd(stPred
< std::pair<int, std::string>, std::string >(), str) );

    std::cout 
<< "After erase: " << std::endl;
    std::for_each(MyMap.begin(), MyMap.end(), stPrintPairContainerElement
< std::pair<int, std::string> >());

    
/// for vector
    typedef std::vector<int> tVector;
    typedef tVector::iterator tVectorIterator;

    tVector MyVec;
    MyVec.push_back(
1);
    MyVec.push_back(
2);
    MyVec.push_back(
3);

    std::cout 
<< "Before erase: " << std::endl;
    std::for_each(MyVec.begin(), MyVec.end(), stPrintNoPairContainerElement
<int>());

    vector_erase(MyVec, 
1);

    std::cout 
<< "After erase: " << std::endl;
    std::for_each(MyVec.begin(), MyVec.end(), stPrintNoPairContainerElement
<int>());
    

    
return 0;
}

另一種寫法:
這個erase返回指向被刪除元素的下一個位置,所以不用再++了
template <class TContainer, class TPred> 
inline
void list_erase_if(TContainer & container, TPred pred) 

    
for (TContainer::iterator it = container.begin(); it != container.end();)
    {
        {
            std::cout 
<< it->first << " : " << it->second << std::endl;
            
if (pred(*it))
            {
                it 
= container.erase(it);
            }
            
else
            {
                
++it;
            }
        }
    }
posted on 2007-04-05 00:12 七星重劍 閱讀(8054) 評論(7)  編輯 收藏 引用 所屬分類: PL--c/c++C++ lib -- STL

FeedBack:
# re: 在for循環(huán)里對std::map進行元素移除 2007-04-05 10:34 小明
# re: 在for循環(huán)里對std::map進行元素移除 2007-04-05 13:51 阿來
@小明
very impressive :)  回復  更多評論
  
# re: 在for循環(huán)里對std::map進行元素移除 2007-04-05 15:05 阿財
Effective STL Item9有詳細介紹,包括遍歷各種容器的刪除介紹  回復  更多評論
  
# re: 在for循環(huán)里對std::map進行元素移除 2007-04-05 20:19 阿來
@阿財
下載了電子書,看看 :)  回復  更多評論
  
# re: 在for循環(huán)里對std::map進行元素移除 2007-04-06 15:04 ny
記得應這樣來的?
it = erase(it);
  回復  更多評論
  
# re: 在for循環(huán)里對std::map進行元素移除 2007-04-06 21:04 阿來
@ny
對,可以;放到帖子里了
這個erase返回指向被刪除元素的下一個位置,所以不用再++了
template <class TContainer, class TPred>
inline
void list_erase_if(TContainer & container, TPred pred)
{
for (TContainer::iterator it = container.begin(); it != container.end();)
{
{
std::cout << it->first << " : " << it->second << std::endl;
if (pred(*it))
{
it = container.erase(it);
}
else
{
++it;
}
}
}
}   回復  更多評論
  
# re: 在for循環(huán)里對std::map進行元素移除[未登錄] 2013-07-10 15:37 master
學習了,贊一個  回復  更多評論
  
# re: 在for循環(huán)里對std::map進行元素移除 2018-07-12 00:41 七星重劍
過了11年多,再回來復習下,哈哈  回復  更多評論
  
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
      <noscript id="pjuwb"></noscript>
            <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
              <dd id="pjuwb"></dd>
              <abbr id="pjuwb"></abbr>
              最新亚洲一区| 狠狠久久五月精品中文字幕| 久久经典综合| 韩曰欧美视频免费观看| 欧美一区二区精品久久911| 欧美一级理论性理论a| 国产一区观看| 欧美激情女人20p| 亚洲美女啪啪| 久久久五月天| 一区二区三欧美| 国产精品视频观看| 久久精品99无色码中文字幕 | 午夜性色一区二区三区免费视频| 欧美一区网站| 日韩视频在线观看国产| 国产女人精品视频| 欧美久久婷婷综合色| 久久精品国产亚洲一区二区三区| 亚洲人成在线免费观看| 久久午夜国产精品| 欧美一区二区日韩一区二区| 亚洲精品小视频在线观看| 国产区欧美区日韩区| 欧美日韩免费观看一区| 美女视频一区免费观看| 香蕉国产精品偷在线观看不卡| 亚洲人体影院| 亚洲欧洲一区二区天堂久久| 欧美成人r级一区二区三区| 校园春色国产精品| 亚洲综合首页| 亚洲欧美激情一区| 亚洲欧美999| 欧美一区二区三区久久精品| av成人福利| 日韩午夜在线观看视频| 欧美亚洲日本一区| 美女主播一区| 午夜天堂精品久久久久| 欧美福利视频在线观看| 久久精品国产免费观看| 国产精品毛片a∨一区二区三区|国 | 亚洲精品一区二区三| 久久综合网络一区二区| 狂野欧美激情性xxxx欧美| 国产一区二区三区黄| 亚洲欧美另类国产| 欧美在线视屏 | 亚洲一区二区免费视频| 亚洲视频专区在线| 欧美性久久久| 亚洲一区三区视频在线观看| 欧美一区二区黄色| 国产一区日韩二区欧美三区| 欧美在线91| 欧美h视频在线| 亚洲精品国产视频| 欧美片第1页综合| 99视频超级精品| 亚洲免费在线观看视频| 国产精品一区=区| 欧美在线一二三四区| 久久综合色综合88| 亚洲三级免费观看| 欧美精品在线免费播放| 在线视频一区二区| 久久久久久一区| 91久久精品国产91久久| 欧美视频一区| 欧美尤物巨大精品爽| 亚洲大黄网站| 一本一道久久综合狠狠老精东影业 | 一区二区三区在线观看视频| 久久视频这里只有精品| 亚洲日本欧美日韩高观看| 亚洲视频免费观看| 国产欧美一区二区精品仙草咪 | 午夜在线成人av| 激情国产一区| 欧美日韩精品免费观看视频完整| 亚洲色在线视频| 麻豆精品一区二区综合av| 一本不卡影院| 激情综合在线| 欧美日韩亚洲综合| 久久av在线| av不卡免费看| 美女精品在线| 亚洲综合视频一区| 亚洲国产日本| 欧美在线免费观看亚洲| 久久成人人人人精品欧| 亚洲欧洲一区二区三区| 国产精品入口麻豆原神| 免费欧美日韩国产三级电影| 亚洲五月婷婷| 亚洲国产天堂网精品网站| 欧美一区二视频在线免费观看| 亚洲精品国产精品国产自| 国产免费观看久久| 欧美精品一区二区三区蜜桃| 久久成人人人人精品欧| 一本色道久久综合精品竹菊| 欧美成年人视频网站| 久久精品亚洲精品国产欧美kt∨| 99热这里只有精品8| 伊人狠狠色j香婷婷综合| 国产精品普通话对白| 欧美日韩国产区| 暖暖成人免费视频| 久久久久久久久伊人| 亚洲欧美日韩在线播放| 一区二区精品国产| 亚洲精品视频免费观看| 亚洲电影在线看| 欧美不卡视频一区发布| 久久琪琪电影院| 久久xxxx| 欧美在线观看视频在线| 性色av一区二区三区在线观看| 亚洲视频高清| 亚洲视频在线一区| 一区二区三区|亚洲午夜| 日韩网站在线| 日韩一级精品视频在线观看| 亚洲激情成人| 亚洲国产美女精品久久久久∴| 狠狠久久五月精品中文字幕| 国产综合视频| 黄色成人在线网址| 禁久久精品乱码| 黄色精品免费| 伊人久久大香线蕉av超碰演员| 国产一区久久久| 一区福利视频| 亚洲国产精品久久91精品| 在线免费观看成人网| 中文一区在线| 亚洲天堂激情| 亚洲欧美激情在线视频| 亚洲欧美一区二区三区极速播放| 亚洲一区二区三区高清不卡| 亚洲永久精品国产| 欧美一级视频一区二区| 久久精品91久久久久久再现| 久久精品在线播放| 另类综合日韩欧美亚洲| 欧美激情第8页| 亚洲人成艺术| 一区二区三区欧美激情| 亚洲午夜在线视频| 欧美在线日韩| 欧美成人黄色小视频| 欧美日韩在线观看一区二区三区| 国产精品豆花视频| 国产日韩欧美一区| 一区二区三区在线观看视频| 亚洲经典三级| 亚洲综合999| 久久综合中文字幕| 亚洲激情在线观看视频免费| 亚洲色图自拍| 久久人人看视频| 欧美激情中文不卡| 国产精品日韩久久久| 激情五月***国产精品| 亚洲免费黄色| 久久国产加勒比精品无码| 欧美成人一区二区三区在线观看| 日韩亚洲国产欧美| 韩国av一区| 亚洲激情网站| 亚洲一区二区在线播放| 久久久精品一区| 91久久久久久国产精品| 亚洲欧美国产一区二区三区| 久色成人在线| 国产精品免费福利| 亚洲激情影视| 亚洲男同1069视频| 蜜乳av另类精品一区二区| 99在线精品观看| 久久亚洲影音av资源网| 国产精品青草综合久久久久99 | 亚洲永久在线| 久久综合导航| 国产精品视频精品视频| 亚洲精品国产精品国产自| 久久av最新网址| 99精品免费| 噜噜噜躁狠狠躁狠狠精品视频| 国产精品久久久久999| 亚洲精品乱码久久久久久日本蜜臀 | 亚洲一区三区视频在线观看| 久久综合九色九九| 国产女精品视频网站免费| 99综合在线| 欧美激情一区二区三区成人| 亚洲欧美在线另类|