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

隨筆 - 46  文章 - 39  trackbacks - 0
<2012年11月>
28293031123
45678910
11121314151617
18192021222324
2526272829301
2345678

常用鏈接

留言簿(2)

隨筆分類

隨筆檔案

友情鏈接

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

容器


類目:容器

描述


容器是一個可以存儲對象(它的元素),并具有訪問其元素的方法的一個對象。特別是,每一個容器模式類型都有一個關聯的迭代器類型來遍歷容器中的元素。

不能保證容器中的元素按特定的方式來存儲;事實上,不同的是每次迭代器是如何通過容器的。也不能保證容器的多個迭代器是一直有效的。(特定的容器類型,像前向容器是提供這樣的保證的。)

容器“擁有”它的元素:存儲在一個容器中的元素的壽命不能超過容器本身。[1]

完善


Assignable

相關類型

(Value type)值類型  X::value_type  存儲在容器中的對象類型。值類型必須是Assignable,但不必是DefaultConstructible.[2]
(Iterator type)迭代器類型 X::iterator  迭代器類型用來遍歷容器的元素。迭代器的值類型就是容器的值類型。必須可以從iterator type轉換成const iterator type。迭代器的類型必須是一個輸入迭代器。[3]
(Const iterator type)常量迭代器類型 X::const_iterator 是一個可以查看但不能修改容器中元素的迭代器類型。[3][4]
(Reference type)引用類型 X::reference 是一個行為像容器值類型引用的類型。[5]
(Const reference type)常量引用類型 X::const_reference 是一個行為像容器值類型常量引用的類型。[5]
(Pointer type)指針類型 X::pointer 是一個行為像容器值類型指針的類型。[6]
(Distance type)距離類型 X::distance_type  一個有符號整數類型來表示兩個容器迭代器之間的距離。此類型必須跟迭代器之間的距離類型是一樣的。[2]
(Size type)大小類型 X::size_type 一個無符號整數類型來表示任何非負值的容器距離類型。[2]

標記法


X    容器模式對象
a,b  X類型對象
T    X類型的值

定義


容器的(size)大小就是它所包含的元素個數,它是一個非負數。

容器的(area)面積就是它占用的字節數。更確切地說,它是元素的面積的總和加上與容器本身相關的任何開銷。如果容器的值類型T是一個簡單的類型(而不是一個容器類型),那么這個容器的面積就是sizeof(T)的常數倍。也就是說,一個簡單值類型的容器a的面積是O(a.size())。

一個(variable sized)可變大小的容器提供插入和/或移除元素的方法;容器大小可能會變化。一個(fixed size)固定大小的容器,它的大小在它的生命周期內是一只不變的。一些固定大小的容器類型,大小在編譯時確定。

有效表達式


除了Assignable,EqualityComparable,和LessThanComparable這些已經定義的表達式,下面的表達式也必須是有效的。

名稱      表達式         類型要求    返回類型
范圍起始  a.begin()                  如果是可變的,返回值為iterator(迭代器),否則為const_iterator[4][7]
范圍結束  a.end()                    如果是可變的,返回值為iterator(迭代器),否則為const_iterator[4]
大小      a.size()                   size_type
最大容量  a.max_size()               size_type
空容器    a.empty()                  可轉換成bool類型
交換      a.swap(b)                  void

表達式語義


名稱          表達式       前提    語義                                                         后置
拷貝構造函數  X(a)                                                                              X().size() == a.size()。X()包含了a中所有元素的副本。
拷貝構造函數  X b(a)                                                                            b().size() == a.size()。b包含了a中所有元素的副本。
賦值運算符    b = a                                                                             b().size() == a.size()。b包含了a中所有元素的副本。
析構函數      a.~X()               銷毀a中所有的元素,并釋放為它們分配的內存(如果有的話)。
范圍起始      a.begin()            返回一個指向容器第一個元素的迭代器(iterator)。[7]            a.begin()要么是提領要么是past-the-end。僅僅當a.size == 0的時候它才是past-the-end。
范圍結束      a.end()              返回一個指向容器的最后一個元素的后面的迭代器(iterator)。     a.end 是 past-the-end。
大小          a.size()             返回容器的大小,也就是元素的個數。[8]                        a.size() >= 0 && a.size <= a.max_size()
最大容量      a.max_size()         返回容器的最大容量。[8]                                      a.max_size() >= 0 && a.max_size >= a.size()
空容器        a.empty()            相當于 a.size() == 0 (但是可能更快)                        
交換          a.swap(b)            相當于swap(a,b)[9]

復雜性擔保

拷貝構造函數,復制操作符,析構函數跟容器大小呈線性關系。

begin()和end()的攤銷時間為常數。

size()跟容器大小呈線性關系。[10] max_size()和empty()的攤銷時間為常數。如果你要測試一個容器是否為空,你應該總是寫c.empty而不是c.size() == 0。這兩個表達式是等價的,但前者可能要快得多。

swap()的攤銷時間為常數。[9]

不變量


有效范圍     任何容器a, [a.begin(), a.end())是一個有效范圍。[11]
范圍大小     a.size()等于從a.begin()到a.end()的距離。
完整性       一個迭代算法[a.begin(), a.end()),將會遍歷a中的每個元素。[11]

模型


vector

注釋


[1]元素的壽命不能超過其容器可能看起來像一個嚴重的限制,事實上,它并不是限制。請注意指針和迭代器都是對象;就像任何其他對象一樣,他們可以被存儲在一個容器內。在這種情況下,容器擁有指針本身,而不是它們指向的對象。

[2]這種表達式必須是一個typedef,這是一個類型的代名詞。

[3]這可能是一個typedef或者其他類型,或者一個定義嵌套類作為一個內部類的X的特定的類型。

[4]容器的iterator類型和const iterator類型可能是一樣的:不能保證每個容器必須有一個相關的可變迭代器類型。例如,set和hash_set定義iterator和const iterator為同一類型。

[5]引用類型需要與普通C++引用類型有相同的語義,但它實際上并不是普通的C++引用。例如,在某些實現中,可能會提供額外的引用類型來支持非標準的內存模型。但是請注意,“智能引用”(用戶定義的引用類型提供額外的功能)不是一個可行的選擇。用戶定義的類型不可能與C++引用類型具有相同語義,因為C++語言不支持重新定義的成員訪問運算符(operator.)。

[6]跟[5]中的引用類型一樣,指針類型需要與C++指針有相同的語義,但實際并不是C++指針。“智能指針”不同于“智能引用”是有可能的。因為可以為用戶定義類型來定義的引用操作符和指針成員訪問運算符可以訪問運算符*和->。

[7]迭代器類型(iterator type)必須是一個輸入迭代器(input iterator),它只提供了一個非常薄弱的擔保;特別是,輸入迭代算法必須都是“單通道”。容器只有一個簡單的迭代器(iterator)可以隨時激活。Forward Container(前向容器)沒有這個限制。

[8]一個固定大小的容器,size() == max_size()。

[9]對于任何Assignable類型,swap可以定義分配條款。這需要三個任務,每一個容器類型,容器的大小呈線性關系。然而,在某種意義上,a.swap(b)是多余的。它的存在僅僅為了提高效率:許多容器,如vector和list,它實現swap的時間復雜度是不變的,而不是線性的。一些容器類型X,那么它們的模板化swap(X&,X&)可以簡單地寫在X::swap(X&)。也就是說X::swap(X&)只能定義在執行時間是常量的情況下。不是所有的容器類X都需要這樣的一個成員函數,但是如果這樣的函數存在,那么必須保證攤銷時間為常量。

[10]對于許多容器,如vector和deque,size是O(1).這滿足了O(N)的要求。

[11]雖然[a.begin(), a.end())必須是一個有效的范圍,而且每個元素必須都包含在容器內,但是在這個范圍內出現的順序是不確定的。如果你兩次遍歷一個容器,它不能保證這兩次的遍歷順序是相同的。Forward Container前向容器沒有這個限制。

參見


迭代器概述,輸入迭代器,序列
posted on 2012-03-13 13:20 canaan 閱讀(1736) 評論(0)  編輯 收藏 引用 所屬分類: 外文翻譯
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            欧美激情va永久在线播放| 亚洲国产午夜| 一本色道久久综合亚洲二区三区| 欧美亚洲一区在线| 日韩视频在线一区二区| 美女视频黄 久久| 黄色另类av| 久久永久免费| 99re成人精品视频| 女仆av观看一区| 亚洲激情偷拍| 欧美高清视频一区| 一本一本久久a久久精品综合麻豆 一本一本久久a久久精品牛牛影视 | 国产精品福利在线观看| 亚洲日本中文字幕区| 欧美国产日本在线| 欧美成人精品| 亚洲日本理论电影| 欧美福利在线| 欧美韩日亚洲| 中文在线一区| 亚洲国产精品福利| 欧美日韩国产精品专区 | 99视频精品全部免费在线| 欧美日韩中文字幕在线| 亚洲免费一在线| 午夜精品久久久久久久久久久| 国产欧美日韩在线播放| 狂野欧美一区| 久久久中精品2020中文| 亚洲精品国产视频| 夜夜嗨av一区二区三区免费区| 欧美日韩视频免费播放| 亚洲欧美日韩另类精品一区二区三区| 亚洲午夜精品17c| 国产精品一区免费在线观看| 久久国产精品一区二区三区四区| 久久久久99| 日韩视频在线免费观看| 亚洲香蕉在线观看| 亚洲第一伊人| 亚洲欧洲精品一区二区三区不卡 | 国产精品人成在线观看免费| 久久狠狠亚洲综合| 欧美不卡三区| 欧美一区永久视频免费观看| 久久夜色精品国产亚洲aⅴ| 一区二区久久久久久| 99精品国产一区二区青青牛奶| 国产女同一区二区| 亚洲国产成人在线| 国产欧美精品日韩| 欧美黑人国产人伦爽爽爽| 国产精品www| 欧美电影免费观看高清完整版| 国产欧美日韩视频在线观看| 一区二区三区精品国产| 在线视频你懂得一区二区三区| 噜噜噜久久亚洲精品国产品小说| 久久精品国产亚洲高清剧情介绍| 欧美涩涩视频| 99精品国产高清一区二区| 日韩西西人体444www| 欧美大片国产精品| 亚洲国内精品| 一本到12不卡视频在线dvd| 欧美www视频| 91久久久久久| 一本大道久久a久久综合婷婷| 欧美高清在线视频| 亚洲欧洲精品一区二区三区不卡| 亚洲片在线资源| 欧美精品福利视频| 一本色道久久综合| 欧美一区二区三区男人的天堂 | 久久av一区二区三区| 久久精品成人| 黄色成人免费观看| 久久亚洲欧美| 亚洲看片免费| 性欧美精品高清| 国产一区二区无遮挡| 久久久.com| 亚洲国产精品一区在线观看不卡| 亚洲精品乱码久久久久久蜜桃91| 欧美岛国激情| 在线亚洲美日韩| 久久国产精品第一页| 国内自拍一区| 欧美激情视频一区二区三区免费| 亚洲精品一区在线| 先锋a资源在线看亚洲| 国外成人在线视频网站| 欧美成人性生活| 亚洲一区欧美二区| 免费成人毛片| 亚洲午夜未删减在线观看| 国产欧美一区二区精品性色| 另类国产ts人妖高潮视频| 亚洲精品一区二区三区樱花| 欧美一区二区三区久久精品茉莉花| 国产最新精品精品你懂的| 欧美成人午夜| 欧美一区二区三区的| 亚洲东热激情| 久久精品中文| 一区二区三区四区在线| 精品av久久707| 国产精品成人观看视频免费| 久久全球大尺度高清视频| 99re6这里只有精品| 久久亚洲欧美| 午夜精品美女自拍福到在线| 亚洲国产成人不卡| 国产欧美日本| 欧美日韩国产123区| 久久免费视频一区| 亚洲欧美一区二区三区久久| 日韩视频在线观看国产| 免费亚洲电影| 久久久久久一区| 亚洲欧美卡通另类91av| 最新日韩av| 亚洲福利视频在线| 国产一区二区三区久久久| 欧美特黄一级大片| 欧美精品在线观看91| 麻豆成人精品| 久久久综合视频| 久久成人亚洲| 欧美一区国产在线| 午夜在线观看免费一区| 亚洲天堂av综合网| 一区二区高清在线| 亚洲精品欧美日韩专区| 亚洲狠狠婷婷| 亚洲国产精品第一区二区| 美女久久网站| 国内一区二区三区在线视频| 久久精品女人的天堂av| 欧美一区二区日韩| 亚洲欧美日韩天堂| 午夜精品久久久久99热蜜桃导演| 99精品久久免费看蜜臀剧情介绍| 亚洲精选91| 99这里只有精品| 一区二区三区视频在线看| 一区二区高清视频| 亚洲一区二区欧美日韩| 亚洲欧美国内爽妇网| 午夜激情综合网| 欧美在线视频一区| 久久久国产成人精品| 久久亚洲高清| 欧美黑人在线播放| 亚洲激情国产| aa级大片欧美三级| 亚洲欧美色婷婷| 久久久综合激的五月天| 美女精品在线| 欧美国产精品v| 国产精品成人一区二区艾草| 国产日韩精品入口| 在线免费观看日本一区| 亚洲免费av观看| 亚洲一区二区三区午夜| 久久精品国产亚洲aⅴ| 欧美成人午夜激情在线| 亚洲精品一区二区三区av| 亚洲免费网址| 麻豆国产va免费精品高清在线| 欧美伦理a级免费电影| 国产精品久久久久影院色老大| 国内精品久久久久影院优| 亚洲日产国产精品| 欧美一区日本一区韩国一区| 欧美暴力喷水在线| 在线一区欧美| 久热精品视频| 国产精品网站一区| 亚洲九九精品| 久久久午夜视频| 亚洲蜜桃精久久久久久久| 欧美一区二区三区日韩| 欧美大片免费久久精品三p | 黄色成人片子| 一区二区电影免费观看| 欧美一区二区三区播放老司机| 欧美黄色影院| 午夜日本精品| 欧美三级电影网| 亚洲国产成人av好男人在线观看| 亚洲午夜激情免费视频| 免费观看一区| 午夜精品视频在线观看一区二区| 欧美高清你懂得| 影院欧美亚洲| 久久精品91久久香蕉加勒比| 日韩天堂av| 欧美成人午夜免费视在线看片 |