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

C++之vector容器的的聲明初始化和增刪改查

 更新時間:2021年07月28日 12:49:37   作者:ZhiboZhao  
這篇文章主要給大家介紹了關于C++vector容器的的聲明初始化和增刪改查的相關資料,向量(Vector)是一個封裝了動態(tài)大小數組的順序容器(Sequence Container),跟任意其它類型容器一樣,它能夠存放各種類型的對象,需要的朋友可以參考下

C++vector容器

 C++中有兩種類型的容器:順序容器和關聯容器。

順序容器主要有vector、list、deque等。其中vector表示一段連續(xù)的內存,基于數組實現,list表示非連續(xù)的內存,基于鏈表實現,deque與vector類似,但是對首元素提供插入和刪除的雙向支持。

關聯容器主要有map和set。map是key-value形式,set是單值。map和set只能存放唯一的key,multimap和multiset可以存放多個相同的key。

容器類自動申請和釋放內存,因此無需new和delete操作。

一、STL的基本概念

STL(Standard Template Library)標準模板庫大體上分為六大組件,分別為容器,算法,迭代器,仿函數,適配器和空間配置器,其中最重要的是容器,算法和迭代器,容器和算法之間通過迭代器無縫連接。

容器:各種數據結構,比如vector,list,deque,set,map等,用來存放數據;

算法:各種常用的算法,比如sort,find,copy,for_each等;

迭代器:提供一種方法,能夠依序尋訪某個容器所含的各個元素,每個容器都有自己專屬的迭代器。迭代器的使用非常類似于指針,可以將迭代器作為指針來理解。

二、vector容器的聲明和初始化

vector<T> v; // T代表模板,可以是任意的數據類型比如int,char,string等
vector<T> Name(v.begin(), v.end()); // 將[v.begin(), v.end)之間的元素賦值創(chuàng)建的Name容器
vector<T> Name(n, elem); // 將Name初始化為包含10個elem值的容器
vector<T> Name(v); // 拷貝構造函數,將容器v賦值給容器Name

三、vector容器的增刪改查

/***********************增加元素****************************/
push_back(elem); // vector尾部插入元素elem
insert(const_iterator, elem); // 在迭代器指向的位置插入元素elem

/***********************刪除元素****************************/
pop_vack();   // 刪除vector最后一個元素
erase(const_iterator); // 刪除迭代器指向位置的元素
erase(const_iterator start, const_iterator_end); // 刪除迭代器start和end之間所有的元素
clear(); // 刪除vector之間的所有元素

/***********************訪問元素****************************/
for(vector<int>::iterator it=v.begin(); it!=v.end(); it++) //it是vector<int>的迭代器,可以理解為指向容器內元素的指針
for(auto it=v.begin(); it!=v.end(); it++) // 通過auto自動推理出it的類型
for(auto sub_v : v) // 增強型for循環(huán),直接通過底層的迭代器訪問容器內元素
for(int i=0; i<v.size(); i++) // 普通for循環(huán),i表示元素的下標,可以與數組一樣通過"v[i]"來訪問,或者"v.at(int i)"

四、vector容器的特點

vector數據結構類似于數組,但是與普通數組不同的是:vector容器可以動態(tài)擴展,但是vector并不是在原空間之后續(xù)接新的空間,而是尋找更大的內存空間然后將元數據拷貝到新的空間,之后再釋放原空間。

但是每次vector擴展空間之后都會多預留一部分空間,當新增的元素個數不超過預留的空間時,便可以直接續(xù)接在原vector后面。

vector中使用size()函數來計算容器內元素的個數,而capacity()函數則返回容器的容量。元素個數相當于vector內實際存儲的數據個數,而容器的容量則代表容器開辟的內存空間個數,因此容量>=元素個數。

下面我們來通過一段代碼來理解一下上述的內容:

vector<int>test;
int* p = nullptr;
int count=0;
for(int i=0; i<10; i++){
    test.push_back(i); // 通過push_back的方式存入數據,理論上每push_back一次,vector便復制一次
    if(p != &test[0]){ // 如果容器進行了復制,那么首地址必然會變,記錄下首地址的變化次數,便得到復制次數
        p = &test[0];
        count++;
    }
}
cout << "vector 復制的次數:" << count << endl; // 輸出復制次數
cout << "vector 的容量:" << test.capacity() << endl; // 輸出vector的容量
cout << "vector 的元素個數:" << test.size() << endl;   // 輸出vector的元素個數
/************************輸出結果***********************/
vector 復制的次數:7 // 可以看出vector只復制了7次,可以判斷每次vector在復制時預留了空間
vector 的容量:13  //  此時,vector中有13個位置,比元素個數多3個,即為預留的空間
vector 的元素個數:10 // 正兒八經的元素個數

總結

到此這篇關于C++之vector容器的的聲明初始化和增刪改查的文章就介紹到這了,更多相關C++vector容器內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • C語言 數據結構之連續(xù)存儲數組的算法

    C語言 數據結構之連續(xù)存儲數組的算法

    這篇文章主要介紹了C語言 數據結構之連續(xù)存儲數組的算法的相關資料,需要的朋友可以參考下
    2017-01-01
  • C++ LeetCode300最長遞增子序列

    C++ LeetCode300最長遞增子序列

    這篇文章主要為大家介紹了C++ LeetCode300最長遞增子序列示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-12-12
  • c語言實現數組循環(huán)左移m位

    c語言實現數組循環(huán)左移m位

    這篇文章主要介紹了c語言實現數組循環(huán)左移m位,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-07-07
  • C++控制臺實現隨機生成路徑迷宮游戲

    C++控制臺實現隨機生成路徑迷宮游戲

    這篇文章主要為大家詳細介紹了C++控制臺實現隨機生成路徑迷宮游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • C語言中函數聲明與調用問題

    C語言中函數聲明與調用問題

    以下是對C語言中的函數聲明與調用進行了詳細的分析介紹,需要的朋友可以過來參考下
    2013-08-08
  • 使用C語言實現三子棋小游戲

    使用C語言實現三子棋小游戲

    這篇文章主要為大家詳細介紹了使用C語言實現三子棋小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++在vscode中的多文件編程問題解讀

    C++在vscode中的多文件編程問題解讀

    這篇文章主要介紹了C++在vscode中的多文件編程問題解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-01-01
  • C++修煉之拷貝構造函數

    C++修煉之拷貝構造函數

    這篇文章主要內容是6個默認成員函數之一的拷貝構造函數的認識與學習,讓同學們充分理解淺拷貝與深拷貝,感興趣的小伙伴可以參考閱讀
    2023-04-04
  • C語言三種函數調用約定_cdecl與_stdcall及_fastcall詳細講解

    C語言三種函數調用約定_cdecl與_stdcall及_fastcall詳細講解

    本篇文章使用的工具是vs2010,內容可能涉及到匯編的知識,建議有一些匯編基礎的再來看,不過沒有匯編基礎也沒有關系,了解一下這三種調用約定即可
    2022-10-10
  • C++設計模式之職責鏈模式

    C++設計模式之職責鏈模式

    這篇文章主要介紹了C++設計模式之職責鏈模式,本文講解了什么是職責鏈模式、什么場合下使用、代碼實例等內容,需要的朋友可以參考下
    2014-10-10

最新評論

敦化市| 德兴市| 柘荣县| 乌海市| 桂平市| 迭部县| 佛学| 上杭县| 随州市| 固原市| 余江县| 嵩明县| 门源| 琼中| 乌拉特前旗| 兴隆县| 长岛县| 邵东县| 东方市| 瑞昌市| 寻乌县| 南投市| 石首市| 新巴尔虎右旗| 五华县| 五寨县| 松原市| 乡宁县| 古蔺县| 镇赉县| 桂阳县| 郸城县| 北川| 保康县| 高尔夫| 嘉祥县| 讷河市| 贡山| 曲阜市| 恭城| 江达县|