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

兔子的技術博客

兔子

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  202 Posts :: 0 Stories :: 43 Comments :: 0 Trackbacks

留言簿(10)

最新評論

閱讀排行榜

評論排行榜

轉自:http://blog.csdn.net/kuanghong/archive/2008/08/20/2801280.aspx

調用reverse_iterator的base成員函數可以產生“對應的”iterator,但這句話有些辭不達意。舉個例子,看一下這段代碼,我們首先把從數字1-5放進一個vector中,然后產生一個指向3的reverse_iterator,并且通過
reverse_iterator的base初始化一個iterator:

 

vector v; 
v.reserve(
5); // 參見條款14 
for(int i = 1;i <= 5++ i) { // 向vector插入1到5 
v.push_back(i); 

vector::reverse_iterator ri 
= // 使ri指向3 
find(v.rbegin(), v.rend(), 3); 
vector::iterator i(ri.
base()); // 使i和ri的base一樣

 

執行上述代碼后,可以想到產生的結果就像這樣: 
 
這張圖很好,顯示了reverse_iterator和它對應的base iterator之間特有的偏移量,就像rbegin()和rend()與相關的begin()和end()一樣,但并沒有說出了所有你需要知道的東西。特別是,它并沒有解釋怎樣在ri上實現你在i上想要完成的操作。有些容器的成員函數只接受iterator類型的參數,所以如果你想要在ri所指的位置插入一個新元素,你不能直接這么做,因為vector的insert函數不接受reverse_iterator。如果你想要刪除ri 所指位置上的元素也會有同樣的問題。erase成員函數會拒絕reverse_iterator,堅持要求iterator。為了完成刪除和一些形式的插入操作,你必須先通過base函數將reverse_iterator轉換成iterator,然后用iterator來完成工作。
先讓我們假設你要在ri指出的位置上把一個新元素插入v。特別的,我們假設你要插入的值是99。記住ri在上
圖中遍歷的順序是自右向左,而且插入操作會將新元素插入到ri位置,并且將原先ri位置的元素移到遍歷過程
的“下一個”位置,我們認為3應該出現在99的左側。插入操作之后,v看起來像這樣: 
 
當然,我們不能用ri來指定插入的地方,因為它不是一個iterator。我們必須用i來代替。如上所述,當ri指向3時,i(就是ri.base())指向4。如果我們用ri來指定插入位置,那么用i指向插入位置,那個假設就是正確的。結論呢?
● 要實現在一個reverse_iterator ri指出的位置上插入新元素,在ri.base()指向的位置插入就行了。對于
insert操作而言,ri和ri.base()是等價的,而且ri.base()真的是ri對應的iterator。
現在再來考慮刪除元素的情況。回顧一下最初的vector(也就是在插入99之前)ri與i的關系: 
 
如果你要刪除ri指向的元素,你不能直接使用i了,因為i與ri不是指向同一個元素。因此,你要刪除的是i的前一個元素。
● 要實現在一個reverse_iterator ri指出的位置上刪除元素,就應該刪除ri.base()的前一個元素。對于刪除操作而言,ri和ri.base()并不等價,而且ri.base()不是ri對應的iterator。
我們還是有必要看看刪除操作的代碼,因為它還挺令人驚訝的。

 

vector v; 
 
// 向v插入1到5,同上 
vecot::reverse_iterator ri = 
find(v.rbegin(), v.rend(), 
3); // 同上,ri指向3 
v.erase(--ri.base()); // 嘗試刪除ri.base()前面的元素;對于vector,一般來說編譯不通過

 

這個設計并不存在什么問題。表達式--ri.base()確實能夠指出我們需要刪除的元素。而且,它們能夠處理除了
vector和string之外的其他所有容器。它可能也能處理vector和string,但對于大多數vector和string的實現,它無。在這樣的實現下,iterator(和const_iterator)會采用內建的指針來實現,所以ri.base()的結果是一個指針。C和C++都規定了不能直接修改函數返回的指針,所以在string和vector的迭代器是指針的STL平臺上,像--ri.base()這樣的表達式無法通過編譯。要移植從一個由reverse_iterator指出的位置刪除元素時,你應該盡量避免修改base的返回值。沒問題。如果你不能減少調用base的返回值,只需要先增加reverse_iterator的值,然后再調用base!

 

 // 同上 
v.erase((++ri).base()); // 刪除ri指向的元素; 
// 這下編譯沒問題了!

 

因為這個方法適用于所有的標準容器,這是刪除一個由reverse_iterator指出的元素時首選的技巧。
現在已經很清楚了,reverse_iterator的base成員函數返回一個“對應的”iterator的說法并不準確。對于插入操作而言,的確如此;但是對于刪除操作,并非如此。當需要把reverse_iterator轉換成iterator的時候,有一點非常重要的是你必須知道你準備怎么處理返回的iterator,因為只有這樣你才能決定你得到的iterator是否是你需要的。

 

本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/kuanghong/archive/2008/08/20/2801280.aspx

posted on 2010-03-10 09:54 會飛的兔子 閱讀(2031) 評論(0)  編輯 收藏 引用 所屬分類: C++庫,組件
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美乱妇高清无乱码| 精品盗摄一区二区三区| 亚洲一区视频在线| 亚洲美女av电影| 久久免费视频在线观看| 在线精品视频在线观看高清| 国模私拍视频一区| 亚洲大片一区二区三区| 免费在线亚洲欧美| 久久亚洲精选| 欧美精品乱码久久久久久按摩| 欧美精品久久一区二区| 国产精品极品美女粉嫩高清在线| 国产精品毛片a∨一区二区三区|国 | 亚洲深夜福利视频| 亚洲手机视频| 久久久久免费视频| 欧美不卡激情三级在线观看| 亚洲二区精品| 亚洲国产成人不卡| 一区二区三区欧美在线| 性欧美xxxx大乳国产app| 久久综合伊人| 国产精品女主播| 美国十次了思思久久精品导航| 欧美成人精品激情在线观看| 国产精品二区二区三区| 影音国产精品| 国产亚洲精品综合一区91| 亚洲福利视频网| 久久久久免费观看| 一区二区三区国产| 久久久噜噜噜久久久| 欧美日韩国产一区精品一区| 欧美日韩一卡| 欧美成人免费一级人片100| 亚洲免费成人av| 亚洲永久免费| 久久综合九色综合欧美狠狠| 亚洲黄页一区| 欧美一区二区精品久久911| 免费不卡欧美自拍视频| 国产欧美69| 欧美了一区在线观看| 精品动漫3d一区二区三区| 一区二区日韩精品| 毛片av中文字幕一区二区| 日韩亚洲一区二区| 理论片一区二区在线| 久久aⅴ国产紧身牛仔裤| 久久久久国产精品一区三寸| 精品成人一区二区| 欧美在线999| 亚洲狼人综合| 美日韩精品免费| 黄色精品在线看| 欧美综合二区| 亚洲影视综合| 国产精品狼人久久影院观看方式| 日韩一区二区精品在线观看| 免费在线看成人av| 久久久久www| 久久精品亚洲乱码伦伦中文| 国产精品网站在线| 亚洲欧美国产高清va在线播| 亚洲精品久久久蜜桃| 蜜臀久久久99精品久久久久久| 欧美国产高潮xxxx1819| 久久综合久久综合久久| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 久久久精品国产免费观看同学| 亚洲美女中出| 欧美日韩视频在线第一区| 一级成人国产| 99国产精品国产精品久久| 欧美精品999| 欧美网站在线| 欧美视频中文字幕在线| 日韩一区二区高清| 91久久极品少妇xxxxⅹ软件| 亚洲第一精品在线| 久久久人成影片一区二区三区| 欧美成人精精品一区二区频| 免费成人av| 午夜精品电影| 欧美中文在线视频| 欧美一区二区三区免费在线看| 国产精品拍天天在线| 欧美亚洲一区| 久久精品日韩欧美| 亚洲精品一二| 亚洲视频香蕉人妖| 国产午夜一区二区三区| 模特精品在线| 欧美日本精品| 久久国产精品久久久久久| 快播亚洲色图| 亚洲欧美成人一区二区三区| 久久久久久久久伊人| 久久国产色av| 亚洲第一视频网站| 亚洲免费网址| 欧美母乳在线| 久久福利视频导航| 亚洲自拍偷拍视频| 亚洲黄网站在线观看| 国产区日韩欧美| 亚洲精品婷婷| 亚洲第一精品福利| 亚洲欧美卡通另类91av| 99在线热播精品免费99热| 久久精品伊人| 午夜精品久久久久久久久久久久久| 蜜桃av综合| 久久久99精品免费观看不卡| 欧美日本中文| 欧美国产一区二区在线观看| 亚洲国产二区| 亚洲高清在线精品| 久久精品免视看| 国产午夜精品久久久久久久| 亚洲综合第一| 麻豆精品在线视频| 亚洲欧美日韩一区在线| 久久se精品一区二区| 99精品欧美一区二区蜜桃免费| 1024亚洲| 亚洲午夜激情在线| 欧美一区二区福利在线| 日韩亚洲精品电影| 欧美怡红院视频一区二区三区| 久久亚洲一区二区| 欧美不卡高清| 国产酒店精品激情| 亚洲精品护士| 精品999在线观看| 久久精品人人做人人爽电影蜜月| 亚洲日韩欧美视频一区| 亚洲人成小说网站色在线| 欧美小视频在线| 国产欧美日韩高清| 国产精品久久久久一区二区三区| 欧美视频网站| 国产精品入口福利| 欧美有码视频| 国产在线一区二区三区四区 | 欧美精品日韩一本| 欧美日韩一区二区三区四区五区| 欧美日韩国产影片| 欧美日韩亚洲网| 欧美精品一区二区三区视频| 亚洲精品久久| 最新成人av网站| 久久久国产午夜精品| 亚洲免费影视| 欧美日韩国产一区二区| 一本久久a久久精品亚洲| 国产精品免费视频观看| 亚洲精选在线观看| 亚洲国产精品成人综合色在线婷婷| 午夜亚洲激情| 久久精品最新地址| 国产香蕉97碰碰久久人人| 国产精品99久久久久久有的能看| 妖精成人www高清在线观看| 亚洲欧美日韩视频二区| 久久久亚洲欧洲日产国码αv| 国产三级精品三级| 欧美在线视频播放| 麻豆精品精品国产自在97香蕉| 欧美日韩在线综合| 欧美国产大片| 中日韩男男gay无套| 亚洲一区三区视频在线观看 | 欧美女人交a| 欧美不卡在线视频| 久久国产精品久久久久久电车| 国产精品一区久久久久| 亚洲三级免费| 欧美专区在线观看| 国产在线高清精品| 久久综合网色—综合色88| 亚洲国产精品ⅴa在线观看| 亚洲日本成人在线观看| 久久中文字幕一区| 亚洲一区二区精品在线| 久久一区二区精品| 欧美日韩精品二区| 欧美裸体一区二区三区| 欧美日韩亚洲在线| 亚洲无限av看| 国产精品欧美久久| 久久亚洲欧美| 日韩一二三在线视频播| 久久高清免费观看| 亚洲欧美不卡| 欧美激情一区在线观看| 亚洲欧美激情精品一区二区| 一色屋精品视频免费看| 欧美日韩国产首页|