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

兔子的技術博客

兔子

   :: 首頁 :: 聯系 :: 聚合  :: 管理
  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>
            精品91免费| 欧美三级不卡| 99天天综合性| 欧美日韩精选| 小处雏高清一区二区三区| 久久久www成人免费精品| 依依成人综合视频| 国产精品一区久久久久| 久久黄色小说| 亚洲天堂av电影| 欧美3dxxxxhd| 午夜在线不卡| 中文亚洲免费| 亚洲一区二区高清| 亚洲欧洲在线视频| 国内精品模特av私拍在线观看| 欧美成人一区二免费视频软件| 中文日韩在线视频| 国产美女在线精品免费观看| 一区二区三区回区在观看免费视频| 久久久久久9| 欧美在线视频二区| 午夜精品一区二区三区在线视| 一本色道久久99精品综合| 亚洲精品专区| aa成人免费视频| 亚洲视频欧洲视频| 亚洲欧美日韩精品综合在线观看| 在线视频你懂得一区二区三区| 亚洲看片免费| 午夜精品国产更新| 亚洲电影在线| 亚洲最新视频在线播放| 亚洲人成在线播放| 亚洲精品在线观| 国产区精品视频| 亚洲国产精品久久久久婷婷老年| 亚洲激情黄色| 亚洲丝袜av一区| 欧美日韩美女| 加勒比av一区二区| 日韩一级黄色av| 欧美一区二区在线看| 久久天堂国产精品| 一区二区三区毛片| 看欧美日韩国产| 国产日韩欧美一区二区三区在线观看| 亚洲精品一区二区三区婷婷月| 亚洲国产日韩欧美在线图片| 亚洲精品久久久久久久久久久久久 | 久久在线免费视频| 欧美一区二区三区视频免费播放| 久久久久久久久蜜桃| 国产精品一区=区| 亚洲国产美女精品久久久久∴| 午夜在线观看欧美| 一本到12不卡视频在线dvd| 久久精品国产96久久久香蕉| 欧美日韩一区在线| 亚洲黄一区二区三区| 欧美国产精品v| 国语自产偷拍精品视频偷| 亚洲深夜福利| 亚洲精品一区在线观看| 欧美日韩精品免费在线观看视频| 在线播放视频一区| 久久亚洲一区二区| 久久五月天婷婷| 亚洲高清av在线| 欧美黄色精品| 欧美日韩一区二区三区免费看| 亚洲欧美日韩成人| 欧美一级专区| 亚洲国产欧美久久| 日韩亚洲综合在线| 国产精品vvv| 欧美高清在线观看| 欧美色区777第一页| 久久久久女教师免费一区| 午夜伦欧美伦电影理论片| 亚洲无亚洲人成网站77777 | 国产女优一区| 蜜臀91精品一区二区三区| 欧美性猛交xxxx免费看久久久| 香蕉久久夜色精品国产使用方法| 久久精品九九| 久久久欧美一区二区| 国产精品五区| 亚洲精品中文在线| 亚洲区国产区| 久久免费观看视频| 欧美在线啊v| 欧美日韩四区| 99亚洲伊人久久精品影院红桃| 亚洲精品视频免费| 久久久噜噜噜| 久久久国产成人精品| 国产精品高潮在线| 99re热这里只有精品视频| 亚洲第一级黄色片| 欧美成人激情在线| 91久久精品日日躁夜夜躁国产| 好吊视频一区二区三区四区 | 亚洲人成在线观看一区二区| 国产欧美日韩一区二区三区在线| 亚洲国产成人tv| 91久久夜色精品国产网站| 久久女同精品一区二区| 久久精品一区二区三区四区| 国产日韩一区二区三区在线播放| 香蕉久久精品日日躁夜夜躁| 久久久国产午夜精品| 一区在线视频| 国产精品久久精品日日| 亚洲男人av电影| 蜜臀av一级做a爰片久久| 最新国产成人av网站网址麻豆 | 狠狠色香婷婷久久亚洲精品| 欧美激情小视频| 欧美中文在线视频| 亚洲第一在线综合网站| 欧美在线观看一区二区| 亚洲欧洲一区二区三区在线观看| 欧美日韩ab片| 久久久久久午夜| 99热在线精品观看| 亚洲欧洲日本专区| 乱中年女人伦av一区二区| 一区二区三区导航| 在线欧美一区| 国外成人在线| 国产精品一区二区久久久| 亚洲一区二区视频在线| 国产精品久久久久三级| 欧美精品在线观看播放| 老司机亚洲精品| 久久精品国产亚洲高清剧情介绍| 99www免费人成精品| 亚洲日韩欧美视频一区| 欧美专区福利在线| 亚洲一区欧美| 性色一区二区| 欧美一级日韩一级| 久久精品国产久精国产一老狼| 亚洲一区二区精品在线| 亚洲婷婷在线| 久久九九久精品国产免费直播| 久久女同精品一区二区| 麻豆精品视频在线观看| 欧美久久久久免费| 欧美日韩高清区| 国产日韩一区二区三区| 91久久久精品| 久久国产精品99国产精| 免费在线国产精品| 99re这里只有精品6| 欧美中文在线字幕| 国产精品亚洲片夜色在线| 亚洲国产精品成人综合色在线婷婷 | 亚洲精选视频在线| 小黄鸭精品aⅴ导航网站入口| 男同欧美伦乱| 国内精品久久久久久久97牛牛| 一区二区三区产品免费精品久久75 | 国产日韩欧美一区二区| 亚洲午夜91| 欧美精品久久一区| 一区二区三区在线免费观看| 欧美一级黄色网| 一区二区日韩| 欧美日韩大片| 在线综合欧美| 欧美高清视频| 欧美国产日韩一区| 亚洲高清网站| 最近中文字幕mv在线一区二区三区四区| 亚洲免费一区二区| 国产精品裸体一区二区三区| 亚洲一区二区影院| 亚洲综合色自拍一区| 欧美午夜精品一区| 亚洲欧美中文日韩v在线观看| 亚洲综合999| 激情五月***国产精品| 美女脱光内衣内裤视频久久网站| 久久精品亚洲| 一本色道久久综合亚洲精品高清| 亚洲精品一区二区在线观看| 欧美日韩亚洲另类| 久久精品国产亚洲aⅴ| 久久精品免费看| 中日韩美女免费视频网址在线观看 | 午夜亚洲性色福利视频| 午夜久久久久久| 亚洲第一偷拍| 一区二区电影免费观看| 国模大胆一区二区三区| 亚洲激情电影在线| 国产在线不卡视频| 亚洲性图久久|