最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C++(STL庫)之順序容器vector的使用

 更新時(shí)間:2020年02月21日 09:31:15   作者:江南、董少  
這篇文章主要介紹了C++(STL庫)之順序容器vector的使用,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、特點(diǎn)

①總的來說:可變大小數(shù)組。支持快速隨機(jī)訪問。在尾部之外的位置插入或刪除元素可能很慢
②元素保存在連續(xù)的內(nèi)存空間中,因此通過下標(biāo)取值非常快
③在容器中間位置添加或刪除元素非常耗時(shí)
④一旦內(nèi)從重分配,和原vector相關(guān)的指針,引用,迭代器都失效。內(nèi)存重分配耗時(shí)很長

二、頭文件、using聲明

  • 頭文件:#include <vector>
  • using聲明:using std::vector;

三、初始化

  • vector<T>  v1; ==>v1是一個(gè)空的vector
  • vector<T> v2(v1); ===>v2是v1的副本,拷貝構(gòu)造
  • vector<T> v2=v1; ===>同上
  • vector<T> v1(n,val); ===>初始化n個(gè)value
  • vector<T> v1(iter1,iter2); ===>用迭代器iter1與iter2所指的區(qū)間內(nèi)元素進(jìn)行初始化
  • vector<T> v1(n); ===>初始化n個(gè)元素,每個(gè)元素使用默認(rèn)值(int為0,string為空...)
  • vector<T> v1{a,b,c...}; ===>用元素a,b,c進(jìn)行初始化
  • vector<T> v1={a,b,c...}; ===>同上

四、相關(guān)操作

1.運(yùn)算符

v1==v2;//判斷v1和v2是否相等
v1!=v2;//判斷v1和v2是否相等
>、>=、<、<= //以字典順序進(jìn)行比較

2.取值

索引取值:v[0],v[1],v[2]....

五、相關(guān)函數(shù)

vector不支持push_front()和emplace_front()

v.empty();//判斷是否為空,返回布爾值
v.size();//返回容器中的元素個(gè)數(shù)
v.max_size();//返回容器的容量
v.front();//得到頭元素
v.back();//得到尾元素
v.at(int i);//得到下標(biāo)i處的元素,若下標(biāo)越界,會(huì)拋出異常
v1.swap(v2);//將v1和v2進(jìn)行交換。容器的成員函數(shù)版本
swap(v1,v2);//同上。系統(tǒng)函數(shù)版本
 
assign(iter1,iter2);//將容器元素更換為一個(gè)迭代器的區(qū)間元素
assign(n,t);//將容器元素變?yōu)閚個(gè)t元素
v.insert(iter,t);//在迭代器iter處插入t。返回所插位置處的迭代器
v.insert(v.end(),10,t);//在容器v的末尾插入10個(gè)元素,每個(gè)元素都是t。返回新添加元素的第一個(gè)元素的迭代器
v.insert(v.end(),{"a","b"...});//將后面花括號(hào)的每個(gè)元素插入容器v的尾部。返回新添加元素的第一個(gè)元素的迭代器
v.insert(v.begin(),v2.end()-2,v2.end());//將容器v2的最后兩個(gè)元素插入容器v的頭部。返回新添加元素的第一個(gè)元素的迭代器
注意:上面這個(gè)用法,后面兩個(gè)參數(shù)不能為自身容器的范圍(v.insert(v.begin(),v.end()-2,v.end());是錯(cuò)誤的)
 
 
//利用insert的返回值,下面代碼為一直在lst容器的頭部插入元素(類似于push_front的功能)
vector<string> v;
auto iter=lst.begin();
while(cin>> word)
 iter=v.insert(iter,word);//insert函數(shù)每回執(zhí)行完,返回容器的首元素位置
//vector不支持pop_front
 
v.push_back(t);//尾部追加元素t
v.pop_back();//刪除尾元素
 
v.earse(iter);//刪除迭代器iter所指位置處的元素。返回刪除位置處后一個(gè)元素迭代器
v.erase(iter1,iter2);//刪除迭代器iter1與iter2區(qū)間內(nèi)的元素。返回刪除最后一個(gè)元素的后一個(gè)元素迭代器
 
v.clear();//清空容器,重新初始化容器
v.resize(n);//將容器v的元素變?yōu)閚個(gè)。若n<原始元素個(gè)數(shù),刪除多于元素。若n>原始元素個(gè)數(shù),則用默認(rèn)初始值初始化容器
v.resize(n,t);//將容器元素變?yōu)閚個(gè)t。與容器原始個(gè)數(shù)無關(guān)
 
vector<int> v(5,666);
v.resize(3);//v內(nèi)有3個(gè)元素,都是666
v.resize(8);;//v內(nèi)有8個(gè)元素,前5個(gè)個(gè)是666,后3個(gè)都是0(默認(rèn))
v.resize(10,666);//v內(nèi)有10個(gè)元素,都是666
//vector不支持emplace_front();
//下面的兩個(gè)函數(shù),是在內(nèi)存中創(chuàng)建一個(gè)對(duì)象,然后添加進(jìn)相應(yīng)的位置
v.empalce(iter,args);//在容器v的位置添加創(chuàng)建一個(gè)args對(duì)象
v.emplace_back(args);//在容器v的尾部添加創(chuàng)建一個(gè)args對(duì)象
 
例如
class A{
 string name;int age;
public:
 A(string name, int age);
};
int main()
{
 vector<A> v;
 v.emplace_back("C語言", 18);//在尾部創(chuàng)建一個(gè)元素
 v.emplace(v.begin(),"C++",18);//在容器v的頭部添加一個(gè)元素
}
v.capacity();//返回當(dāng)前容器的容量(總共能存多少個(gè))
v.reserve(n);//為容器v重新分配n個(gè)內(nèi)存空間(如果n<=當(dāng)前容器大小,則什么都不做)

六、容器操作使迭代器、引用、指針失效

1.概念:向容器中添加或者刪除元素可能會(huì)使容器的迭代器、引用、指針失效。失效的迭代器、引用、指針不再表示任何元素,使用起來非常危險(xiǎn)

2.添加元素

  • 如果vector沒有內(nèi)存重分配。插入位置之前的元素的迭代器、引用、指針有效,插入位置之后的迭代器、引用、指針都失效
  • 如果內(nèi)存重分配,則所有的迭代器、引用、指針都失效

3.刪除元素

刪除元素之前的迭代器、引用、指針有效,之后的失效

七、vector是如何增長的

1.概念

vector是可變長的數(shù)組,當(dāng)向其中增加元素時(shí),如果空間已滿,回自動(dòng)申請(qǐng)一個(gè)新的空間,并將原來的空間釋放,使指向原來空間的指針指向于新空間

2.方法:vector增長是有規(guī)律的,可以通過一個(gè)公式描述

  • maxSize=maxSize+((maxSize>>1)>1?(maxSize>>1):1)
  • 圖解:就是由1、2、3、4、6、9...依次增長

到此這篇關(guān)于C++(STL庫)之順序容器vector的使用的文章就介紹到這了,更多相關(guān)C++ 順序容器vector內(nèi)容請(qǐng)搜素腳本之家以前的文章或下面相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#委托所蘊(yùn)含的函數(shù)指針概念詳細(xì)解析

    C#委托所蘊(yùn)含的函數(shù)指針概念詳細(xì)解析

    C#中用委托這種概念實(shí)現(xiàn)了函數(shù)指針技術(shù)而已,另外.ent提供額外的安全性,當(dāng)然也損失了靈活性
    2013-09-09
  • C語言通訊錄管理系統(tǒng)完整代碼

    C語言通訊錄管理系統(tǒng)完整代碼

    這篇文章主要為大家詳細(xì)介紹了C語言通訊錄管理系統(tǒng)完整代碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • c語言設(shè)計(jì)模式之單例模式中的餓漢與懶漢詳解

    c語言設(shè)計(jì)模式之單例模式中的餓漢與懶漢詳解

    這篇文章主要介紹了c語言設(shè)計(jì)模式之單例模式中的餓漢與懶漢詳解,單例模式是指一個(gè)類只能創(chuàng)建一個(gè)對(duì)象,保證系統(tǒng)中該類只有一個(gè)實(shí)例,并提供一個(gè)可供訪問的全局訪問點(diǎn),該實(shí)例被所有程序模塊共享,需要的朋友可以參考下
    2023-08-08
  • C語言中的常量詳解

    C語言中的常量詳解

    本文主要講解C語言 常量,這里整理了 C語言常量的基礎(chǔ)知識(shí),并附代碼示例和示例詳細(xì)講解,希望能幫助開始學(xué)習(xí)C 語言的同學(xué)
    2021-09-09
  • C語言代碼鏈表實(shí)現(xiàn)貪吃蛇游戲

    C語言代碼鏈表實(shí)現(xiàn)貪吃蛇游戲

    這篇文章主要為大家詳細(xì)介紹了C語言鏈表實(shí)現(xiàn)貪吃蛇游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-01-01
  • OpenCV 視頻中火焰檢測識(shí)別實(shí)踐

    OpenCV 視頻中火焰檢測識(shí)別實(shí)踐

    本文主要介紹了OpenCV 視頻中火焰檢測識(shí)別,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-09-09
  • C++中實(shí)現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實(shí)例代碼

    C++中實(shí)現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實(shí)例代碼

    這篇文章主要介紹了實(shí)現(xiàn)把表的數(shù)據(jù)導(dǎo)出到EXCEL并打印實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • C語言雙向鏈表的原理與使用操作

    C語言雙向鏈表的原理與使用操作

    雙向鏈表也叫雙鏈表,是鏈表的一種,它的每個(gè)數(shù)據(jù)結(jié)點(diǎn)中都有兩個(gè)指針,分別指向直接后繼和直接前驅(qū)。本文主要介紹了C語言算法中雙向鏈表的實(shí)現(xiàn),需要的可以參考一下
    2022-05-05
  • 深入理解數(shù)組指針與指針數(shù)組的區(qū)別

    深入理解數(shù)組指針與指針數(shù)組的區(qū)別

    本篇文章是對(duì)數(shù)組指針與指針數(shù)組的區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C++中的throw關(guān)鍵字詳解

    C++中的throw關(guān)鍵字詳解

    throw關(guān)鍵字是在C語言中用來拋出異常的關(guān)鍵字,它通常與try和catch一起使用,用于在程序中發(fā)生錯(cuò)誤時(shí)進(jìn)行異常處理,當(dāng)遇到無法處理的錯(cuò)誤情況時(shí),我們可以使用throw關(guān)鍵字主動(dòng)拋出異常,所以本文給大家詳細(xì)的介紹一下C++中的throw關(guān)鍵字,需要的朋友可以參考下
    2023-09-09

最新評(píng)論

登封市| 盐城市| 彭阳县| 汕尾市| 通化县| 花莲市| 阜宁县| 海城市| 富川| 西丰县| 调兵山市| 武宁县| 扶沟县| 延寿县| 安乡县| 油尖旺区| 新营市| 宁陕县| 永仁县| 铁岭市| 浦东新区| 塘沽区| SHOW| 泊头市| 五原县| 元氏县| 什邡市| 日土县| 荥经县| 金阳县| 民丰县| 双峰县| 含山县| 平昌县| 沙雅县| 榕江县| 龙岩市| 顺义区| 白朗县| 吉林省| 嘉兴市|