亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C++ > 正文

C++Primer筆記之順序容器的使用詳解

2020-01-26 16:16:25
字體:
來源:轉載
供稿:網友

  順序容器,它將單一類型元素聚集起來成為容器,然后根據位置來存儲和訪問這些元素,這就是順序容器。標準庫里定義了三種類型:vector(支持快速隨機訪問)、list(支持快速插入、刪除)、deque(雙端隊列)容器只定義了少量操作,大多數額外的操作由算法庫提供。容器內元素的類型約束;1、元素類型必須支持賦值運算;2、元素類型的對象必須可以復制。這是容器元素類型的最低要求,如果想支持一些其他特殊要求,則必須具備相關的性質。

可以定義容器的容器vector< vector<int> > lines;//必須使用"> >"中間的空格,否則會出現變異錯誤

迭代器運算:

  關系操作符只適用于vector和deque容器,它們可以根據元素位置直接有效地訪問指定的容器元素。而list容器的迭代器既不支持算術運算(加法或者減法),也不支持關系運算(<=,<,>=,>),它只提供前置和后置的自增、自減運算以及相等(不等)運算。

迭代器范圍:

  c++使用一對迭代器標記迭代器范圍,通常命名為first和last或beg和end。該范圍內的元素包括迭代器first指向的元素,以及從first開始一直到迭代器last指向的位置之前的所有元素,此類元素范圍稱為左閉合區間[first,last)。

順序容器的操作:

  在容器中添加元素;在容器中刪除元素;設置容器大??;獲取容器內的第一個和最后一個元素。對于begin()、end()、rbegin()、 rend()四個操作,均有const版本。如果容器時const,則其返回類型要加上const_前綴。c.push_back(t) 在容器c的尾部添加值為t的元素,返回void類型。c.push_front(t) 在容器c的前端添加值為t的元素,返回void類型。但是只有list和deque具有這樣的性質。

復制代碼 代碼如下:

//容器的順序遍歷
vector<int>::reverse_iterator iterReverse=vect.rbegin();//定義反向迭代器while(iterReverse!=vect.rend())
{
    cout<<*iterReverse<<endl;
    iterReverse++;
}
vector<int>::iterator iter = vect.begin();//定義正向迭代器
while(iter!=vect.end())
{
    cout<<*iter<<endl;
    iter++;
}

  在容器中的指定位置添加元素:使用insert函數:由于迭代器可能指向超出容器末端的下一位置沒這事一個不存在的元素,因此insert函數是在其指向位置之前而非其后插入元素。mylist.insert(iter,element);
復制代碼 代碼如下:

//獲取中心位置迭代器,需要注意的list不允許如下的迭代器的加法
vector<int>::iterator middle=vectCpy.begin()+vect.size()/2;
vectCpy.insert(middle,1001);//在中間位置添加一個元素 

  插入一段元素:
復制代碼 代碼如下:

vectCpy.insert(vectCpy.begin(),10,9);//在第一個元素后面添加10個初值為9的元素
int num[3]={555,666,777};
vectCpy.insert(vectCpy.end(),num,num+3);//在vectCpy后面加入一段來自num數組里的元素
vectCpy.insert(vectCpy.end(),vect.begin(),vect.end());//在vectCpy后加入一段來自迭代器對間的元素

  需要注意的是,添加元素可能會導致某些或全部迭代器失效,假設所有迭代器失效是最安全的做法。不要存儲end操作返回的迭代器,為了避免存儲end迭代器,可以在每次做完插入運算重新計算end迭代器值。

關鍵概念:容器元素都是副本在容器中添加元素時,系統是將元素值復制到容器里。類似的,使用一段元素初始化新容器時,新容器存放的事原始元素的副本。本復制的原始值與新容器中的元素各不相干,此后,容器內元素值發生變化時,被復制的原值不會受到影響,反之亦然。

容器的比較:

  比較的容器必須具有相同的容器類型,而且其元素類型也必須相同。容器的比較式基于容器內元素的比較。兩個容器具有相同的長度而且所有的元素都相等,那么這兩個容器就相等。如果兩個容器長度不相等,但較短的容器中所有元素都等于較長容器中對應的元素,則稱較短的容器小于另一個容器。如果兩個容器都是對方的初始子序列,則它們的比較結果取決于所比較的第一個不相等的元素。

復制代碼 代碼如下:

vector<int> vect;
vect.push_back(1);
vect.push_back(2);
vect.push_back(3);
vector<int> vectCpy(vect);
if(vectCpy==vect) cout<<"Equal"<<endl;
else cout<<"Not Equal"<<endl;

容器大小的操作:

  容器類型提供resize函數來改變容器所包含的元素個數。如果當前的容器長度大于新的長度值,則該容器后部的元素會被刪除,如果當前的容器長度小于新的長度值,則系統會在該容器后部添加新元素。resize操作可能會使迭代器失效。例子:

復制代碼 代碼如下:

list<int> ilist(10,2);//10個元素容器,初始值均為2
ilist.resize(15);//在原有基礎上,再后面添加5個元素,初始值為0
ilist.resize(25,-1);//在上行的基礎上,再后面再添加10個元素,值為-1
ilist.resize(5);//在ilist的后部刪除20個元素

訪問元素:

  如果容器非空,那么容器類型的front和back成員將返回容器內第一個或最后一個元素的引用

復制代碼 代碼如下:

int &ref=vect.front();//front和back返回容器內第一個或最后一個元素的引用
ref=1000001;//改變引用的元素,vect內元素的值也會改變
cout<<vect[0]<<" "<<vect.at(1)<<endl;//只適用于vector和deque,如果給出的下標無效,則會發生outOfRange的異常

刪除元素:

  pop_front和pop_back函數用于刪除容器內的第一個和最后一個元素。

  刪除一個或者一段元素更通用的方法是用erase操作,有兩個版本:刪除由一個迭代器指向的單個元素,或刪除由一對迭代器標記的一段元素。erase返回一個迭代器,它指向被刪除元素或元素段后面的元素。通常,必須在容器中查找要刪除的元素后,才使用erase操作。尋找一個指定元素最簡單的方法,是使用標準庫中的find方法。必須包含頭文件algorithm.h

復制代碼 代碼如下:

#include<algorithm>
list<int>::iterator searchIter= find(mylist.begin(),mylist.end(),1233);
if(searchIter!=mylist.end())//有可能找不到
{
mylist.erase(searchIter);
}


  刪除容器內所有元素:mylist.clear()或者mylist.erase(mylist.begin(),mylist.end());

容器的選用:

  vector和deque容器提供了對元素的快速隨機訪問,但付出的代價是,在容器的任意位置插入或刪除元素,比在容器尾部插入和刪除元素的開銷更大。list類型在任何位置都能快速插入和刪除,但付出的代價是元素的隨機訪問開銷較大。其原因就是在內部實現的數據結構中,一個是在內存中順序地址分批的,而另一個是在類似鏈表的方式,隨機地址分配的,所以導致性質的不同。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产成人精品一区| 欧美日韩ab片| 久久91亚洲人成电影网站| 亚洲色图综合久久| 国模私拍视频一区| 欧美在线一级va免费观看| 欧美限制级电影在线观看| 在线亚洲男人天堂| 亚洲男人天天操| 亚洲xxxx妇黄裸体| 亚洲丁香婷深爱综合| 久久久精品免费| 日本精品久久久久久久| 亚洲精品一区av在线播放| 亚洲色图美腿丝袜| 亚洲午夜久久久影院| 亚洲男人天天操| 91在线免费观看网站| 欧美中文字幕第一页| 2019中文字幕在线| 久久久女女女女999久久| 欧美福利视频网站| 欧美在线视频播放| 日韩亚洲综合在线| 日韩成人xxxx| 国产精品一区二区三| 国产精品jizz在线观看麻豆| 清纯唯美亚洲综合| 奇门遁甲1982国语版免费观看高清| 综合网日日天干夜夜久久| 国产精品久久久久久久一区探花| 九九久久久久99精品| 亚洲精品久久久久久下一站| 久久激情五月丁香伊人| 亚洲摸下面视频| 毛片精品免费在线观看| 黄色91在线观看| 国产精品久久久久久久久免费| 欧美极品在线播放| 国产网站欧美日韩免费精品在线观看| 中文字幕日韩有码| 456亚洲影院| 亚洲精品在线视频| 亚洲最新中文字幕| 国产欧美日韩亚洲精品| 亚洲男人天堂古典| 国产手机视频精品| 亚洲淫片在线视频| 欧美日韩国内自拍| 日韩一区二区久久久| 国产欧美日韩亚洲精品| 91欧美日韩一区| 中文字幕亚洲情99在线| 自拍偷拍亚洲精品| 少妇高潮久久久久久潘金莲| 欧美野外猛男的大粗鳮| 中国china体内裑精亚洲片| 国产在线观看91精品一区| 久久久欧美一区二区| 久久久精品久久| 91国在线精品国内播放| 日韩一区二区福利| 国产精品专区h在线观看| 成人性生交大片免费观看嘿嘿视频| 午夜欧美不卡精品aaaaa| 欧美xxxwww| 国产精品久久久久久亚洲调教| 国产精品久久久久久搜索| 538国产精品一区二区免费视频| 91精品国产91久久| 亚洲欧美激情一区| 福利一区福利二区微拍刺激| 国产精品27p| 日韩在线免费av| 亚洲视频欧洲视频| 亚洲成人av片在线观看| 夜夜狂射影院欧美极品| 国产精品久久精品| 成人国产精品日本在线| 欧美激情视频网址| 草民午夜欧美限制a级福利片| 亚洲片国产一区一级在线观看| 国产精品久久二区| 久久人人爽人人爽爽久久| 亚洲人精品午夜在线观看| 91极品视频在线| 国产精品日韩专区| 91精品国产自产在线老师啪| 日韩人体视频一二区| 精品欧美激情精品一区| 国产精品高潮呻吟视频| 久久男人的天堂| 97精品伊人久久久大香线蕉| 91精品国产高清自在线| 精品福利在线视频| 国产视频福利一区| 国产主播在线一区| 欧美日韩国内自拍| 高清一区二区三区四区五区| 成人激情综合网| 日韩精品高清在线观看| 亚洲精品一二区| 伊人精品在线观看| 久久久久久久久久久av| 国产精品久久久久久久久久新婚| 亚洲第一av在线| 伊人久久男人天堂| 91av视频在线播放| 欧美日韩综合视频| 国产一区二区黑人欧美xxxx| 播播国产欧美激情| 97超视频免费观看| 亚洲色图偷窥自拍| 亚洲成人激情在线观看| 国产精品第8页| 91av视频在线观看| 国产午夜精品全部视频在线播放| 少妇高潮久久77777| 欧美高清理论片| 亚洲一区国产精品| 奇门遁甲1982国语版免费观看高清| 亚洲国产成人久久综合一区| 国产精品欧美亚洲777777| 97婷婷涩涩精品一区| 欧美福利在线观看| 久久97久久97精品免视看| 久久久999国产| 亚洲福利小视频| 在线国产精品视频| 日韩大片免费观看视频播放| 久久久电影免费观看完整版| 国产成人一区二区三区小说| 亚洲精选中文字幕| 亚洲国产中文字幕在线观看| 中国人与牲禽动交精品| 亚洲电影免费观看高清完整版在线| 7777免费精品视频| 在线日韩av观看| 日韩欧美成人区| 亚洲美女自拍视频| 精品成人国产在线观看男人呻吟| 91精品一区二区| 国产精品高潮在线| 欧美日韩一区免费| 欧美高清激情视频| 久久久久久这里只有精品| 懂色av一区二区三区| 国产一区二区三区视频在线观看| 国产精品久久久久久久久久ktv| 欧美在线激情视频| 亚洲精品一区二区三区婷婷月| 成人乱人伦精品视频在线观看| 国产成人jvid在线播放| 国产精品xxxxx| 欧美最顶级丰满的aⅴ艳星| 色噜噜狠狠色综合网图区| 国产精品aaa| 亚洲高清在线观看| 亚洲天堂成人在线| 欧美尺度大的性做爰视频| 精品美女国产在线| 日韩精品中文在线观看| 欧美巨大黑人极品精男| 在线播放日韩专区|