成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

刪除C++容器值相關技巧講解

開發 后端
刪除C++容器值的實現方法還是比較多的,我們今天為大家介紹的就是其中一個比較常用的,簡單的實現方法,希望能給大家帶來一些幫助。

在程序開發的過程中,C++編程語言中的容器里有會有很多值,有些是比較有用的,而有些是沒用的。那么對于這些沒有用的值我們應該如何進行刪除呢?在這里我們將會為大家詳細介紹刪除C++容器值的相關方法。

C++的容器中一般都提供erase函數,此函數接收的參數一般有一個是一個迭代器:

如果刪除C++容器值的話,我們可能一般都用過:

  1. list<int> c;  
  2. // todo insert items  
  3. for (list<int>::iterator i = c.begin(); i!= c.end(); ++i)  
  4. {  
  5. if ((*i)>10)  
  6. {  
  7. // 如果有一個值大于10,刪除之  
  8. c.erase(i);  
  9. break;  
  10. }  

上述代碼在刪除一個元素的時候并沒有問題。。。但是我們想刪除所有大于10的值,于是:

  1. list<int> c;  
  2. // todo insert items  
  3. for (list<int>::iterator i = c.begin(); i!= c.end(); ++i)  
  4. {  
  5. if ((*i)>10)  
  6. {  
  7. // 刪除所有大于10的值  
  8. c.erase(i);  
  9. }  

滿懷希望的編譯,運行。。。于是異常發生。。。啊。。。哦。。。

原來是刪除迭代器i后,i所指的元素已經失效了,然后給i++,它已經不在存在了。。。于是絞盡腦汁,出籠了下面的刪除C++容器值代碼:

  1. list<int> c;  
  2. // todo insert items  
  3. list<int>::iterator nextitr = c.begin();  
  4. for (list<int>::iterator i = c.begin();;)  
  5. {  
  6. if(nextitr == c.end())  
  7. break;  
  8. ++nextitr;  
  9. if ((*i)>10)  
  10. {  
  11. // 如果有一個值大于10,刪除之  
  12. c.erase(i);  
  13. }  
  14. i = nextitr;  

上面的代碼很容易理解,即在刪除一個迭代器之前,把它的之后的迭代器先存儲,然后在下次循環的時候利用之前存儲的迭代器。

OK,我們看到上面這段代碼可以工作了,行為似乎也還正確,只是。。。代碼似乎多了點。我想代碼能夠少點就好了,邏輯也不要那么麻煩。那么我們看下面的代碼(轉載自Effective STL)。

  1. list<int> c;  
  2. // todo insert items  
  3. for (list<int>::iterator i = c.begin(); i!= c.end();)  
  4. {  
  5. if ((*i)>10)  
  6. {  
  7. // 如果有一個值大于10,刪除之  
  8. c.erase(i++);  
  9. }  
  10. else  
  11. i++;  

嗯。。。高手就是高手(我以前根本沒有在意過++i和i++在使用的過程中能有這么大的區別)好了,***再提供一個版本,利用list的remove_if函數。

  1. bool fun(int i)  
  2. {  
  3. if(i>10)  
  4. return true;  
  5. else  
  6. return false;  
  7. }  
  8. list<int> c;  
  9. // todo insert items  
  10. c.remove_if(fun); 

嗯,其實刪除C++容器值的方式還是挺多的。

【編輯推薦】

  1. C++ Builder操作Excel表實現技巧講解
  2. C++指針漂移問題解決方案
  3. C++頭文件包含內容概覽
  4. C++初始化和賦值區別解析
  5. C++標準輸入輸出應用技巧解析
責任編輯:曹凱 來源: 博客園
相關推薦

2010-02-01 15:01:34

C++拋出異常

2010-01-18 10:16:58

學習C++

2010-01-08 14:07:47

VB.NET窗體傳值

2010-02-05 13:44:06

C++ eof()函數

2010-02-05 13:52:04

C++資源管理

2010-02-06 15:15:31

C++ Builder

2010-02-01 17:37:35

C++調用C鏈接庫

2009-12-30 18:18:32

Silverlight

2010-01-04 14:49:30

Silverlight

2011-05-30 15:29:32

C++

2010-02-05 17:25:26

C++標識符命名規則

2010-01-28 16:55:26

Android對話框

2011-07-10 15:26:54

C++

2010-01-22 16:35:41

C++開發

2010-01-26 17:11:13

C++編程

2010-02-06 10:24:48

C++二維數組初始化

2010-02-03 17:42:33

C++模板參數

2010-01-25 18:26:44

CC++頭文件

2011-07-13 16:36:11

C++

2010-02-01 11:13:00

C++ Traits
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 精品国产乱码久久久久久果冻传媒 | 久久久精品网站 | 精品亚洲一区二区 | 色频 | 久久成人一区 | 国产视频一区二区 | 国产一级免费视频 | 久久亚洲一区二区三区四区 | 欧美乱做爰xxxⅹ久久久 | 99精品国产一区二区三区 | 亚洲电影第1页 | 99精品欧美一区二区三区 | 激情欧美一区二区三区中文字幕 | 在线中文字幕亚洲 | 91 在线| 黄色毛片免费看 | 日韩精品一区二区三区中文字幕 | www.一级毛片 | 色吧色综合 | 成人午夜免费在线视频 | 欧美在线视频一区 | 欧美日韩在线观看一区 | 午夜视频免费在线观看 | av网站免费观看 | 亚洲高清视频一区二区 | 国产精品一区二区在线 | 啪啪精品| 亚洲欧美日韩精品久久亚洲区 | 精品一区二区三区在线播放 | 999久久久| 日韩欧美亚洲一区 | 1204国产成人精品视频 | 欧美日韩国产精品一区二区 | 日韩精品无码一区二区三区 | 成人精品视频免费 | jlzzxxxx18hd护士 | 久久久久久成人网 | 一二三四在线视频观看社区 | 国产精品久久国产精品 | 日本污视频 | 国产精品欧美一区二区 |