亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

一、特點

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

二、頭文件、using聲明

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

三、初始化

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

四、相關操作

1.運算符

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

2.取值

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

五、相關函數

vector不支持push_front()和emplace_front()

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

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

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

2.添加元素

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

3.刪除元素

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

七、vector是如何增長的

1.概念

vector是可變長的數組,當向其中增加元素時,如果空間已滿,回自動申請一個新的空間,并將原來的空間釋放,使指向原來空間的指針指向于新空間

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

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

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

相關文章

  • mingw編譯的windows命令行貪吃蛇示例

    mingw編譯的windows命令行貪吃蛇示例

    這篇文章主要介紹了mingw編譯的windows命令行貪吃蛇示例,需要的朋友可以參考下
    2014-04-04
  • C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數字及其他字符的個數(Ctrl+Z終止輸入)

    C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數字及其他字符的個數(Ctrl+Z終止輸入)

    這篇文章主要介紹了C語言統(tǒng)計一串字符中空格鍵、Tab鍵、回車鍵、字母、數字及其他字符的個數(Ctrl+Z終止輸入) ,需要的朋友可以參考下
    2018-03-03
  • C++11?nullptr實現初始化空指針

    C++11?nullptr實現初始化空指針

    避免產生“野指針”最有效的方法,就是在定義指針的同時完成初始化操作,本文主要介紹了C++11?nullptr初始化空指針,感興趣的可以了解一下
    2022-01-01
  • C++中的ilst使用以及模擬實現

    C++中的ilst使用以及模擬實現

    list是一個類模板,加<類型>實例化才是具體的類,可以在任意位置進行插入和刪除的序列式容器,本文將通過代碼示例給大家介紹一下C++中的ilst使用以及模擬實現,需要的朋友可以參考下
    2023-08-08
  • C++二分法在數組中查找關鍵字的方法

    C++二分法在數組中查找關鍵字的方法

    這篇文章主要介紹了C++二分法在數組中查找關鍵字的方法,涉及C++數組查找算法的相關技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • C語言學好遞歸看這一篇就夠了

    C語言學好遞歸看這一篇就夠了

    遞歸指的是在函數的定義中使用函數自身的方法,舉個例子: 從前有座山,山里有座廟,廟里有個老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,廟里有個老和尚,正在給小和尚講故事呢!故事是什么呢?"從前有座山,山里有座廟,循環(huán)下去
    2021-10-10
  • c++野指針的原理以及避免方法

    c++野指針的原理以及避免方法

    這篇文章主要介紹了c++野指針的原理以及避免方法,幫助大家更好的學習和理解c++,感興趣的朋友可以了解下
    2020-08-08
  • C語言數據結構之單鏈表存儲詳解

    C語言數據結構之單鏈表存儲詳解

    鏈表是一種物理存儲結構上非連續(xù)、非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接次序實現的。本文將和大家一起聊聊C語言中單鏈表的存儲,感興趣的可以學習一下
    2022-07-07
  • C++實現“隱藏實現,開放接口”的方案

    C++實現“隱藏實現,開放接口”的方案

    本文從一個實例講解了C++實現“隱藏實現,開放接口”的方案,文章條理清新,內容充實,需要的朋友可以參考下
    2015-07-07
  • c++ *運算符重載

    c++ *運算符重載

    運算符重載重載運算符是C++ 的一個重要特性,使用運算符重載, 的一個重要特性,使用運算符重載, 重載運算符是程序員可以把C++ 運算符的定義擴展到運算分量是對象
    2014-09-09

最新評論