STL vector容器用法

2022-01-10 C語言Plus

一、什麼是vector?

向量(Vector)是一個封裝了動態大小數組的順序容器(Sequence Container),是一個模板類。跟任意其它類型容器一樣,它能夠存放各種類型的對象。

二、容器特性1.順序序列

順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元素。

2.動態數組

支持對序列中的任意元素進行快速直接訪問。在末尾地添加/刪除元素操作是比較快的。

3.支持隨機訪問迭代器(下一章介紹)

可以用迭代器隨意訪問容器

三、基本函數實現1,構造函數

vector():創建一個空vector

vector(int nSize):創建一個vector,元素個數為nSize

vector(int nSize,const t& t):創建一個vector,元素個數為nSize,且值均為t

vector(const vector&):複製構造函數

vector(begin,end):複製[begin,end)區間內另一個數組的元素到vector中

2.增加函數

void push_back(const T& x):向量尾部增加一個元素X

iterator insert(iterator it,const T& x):向量中迭代器指向元素前增加一個元素x

iterator insert(iterator it,int n,const T& x):向量中迭代器指向元素前增加n個相同的元素x

iterator insert(iterator it,const_iterator first,const_iterator last):向量中迭代器指向元素前插入另一個相同類型向量的[first,last)間的數據

3.刪除函數

iterator erase(iterator it):刪除向量中迭代器指向元素

iterator erase(iterator first,iterator last):刪除向量中[first,last)中元素

void pop_back():刪除向量中最後一個元素

void clear():清空向量中所有元素

4.遍歷函數

reference at(int pos):返回pos位置元素的引用

reference front():返回首元素的引用

reference back():返回尾元素的引用

iterator begin():返回向量頭指針,指向第一個元素

iterator end():返回向量尾指針,指向向量最後一個元素的下一個位置

reverse_iterator rbegin():反向迭代器,指向最後一個元素

reverse_iterator rend():反向迭代器,指向第一個元素之前的位置

5.判斷函數6.大小函數

int size() const:返回向量中元素的個數

int capacity() const:返回當前向量所能容納的最大元素值

int max_size() const:返回最大可允許的vector元素數量值

7.其他函數

void swap(vector&):交換兩個同類型向量的數據

void assign(int n,const T& x):設置向量中第n個元素的值為x

void assign(const_iterator first,const_iterator last):向量中[first,last)中元素設置成當前向量元素

8.看著清楚

1.push_back 在數組的最後添加一個數據

2.pop_back 去掉數組的最後一個數據

3.at 得到編號位置的數據

4.begin 得到數組頭的指針

5.end 得到數組的最後一個單元+1的指針

6.front 得到數組頭的引用

7.back 得到數組的最後一個單元的引用

8.max_size 得到vector最大可以是多大

9.capacity 當前vector分配的大小

10.size 當前使用數據的大小

11.resize 改變當前使用數據的大小,如果它比當前使用的大,者填充默認值

12.reserve 改變當前vecotr所分配空間的大小

13.erase 刪除指針指向的數據項

14.clear 清空當前的vector

15.rbegin 將vector反轉後的開始指針返回(其實就是原來的end-1)

16.rend 將vector反轉構的結束指針返回(其實就是原來的begin-1)

17.empty 判斷vector是否為空

18.swap 與另一個vector交換數據

四、基本用法
 #include<iostream>
 #include <vector>
 using namespace std;
 
 int main()
 {
  vector<int> v;
  for (int i = 0; i < 10; i++)//添加10個元素
 {
  v.push_back(i);
 }
  //輸出所有元素三種方式
  for (int i = 0; i < 10; i++)//普通方式
 {
  cout << v[i] << " ";
 }
  cout << endl;
  for (int i : v)//C++11標準,基於範圍的訪問
 {
  cout << i << " ";
 }
  cout << endl;
  for (vector<int>::iterator it = v.begin(); it != v.end(); it++)//容器迭代器訪問方式
 {
  cout << *it << " ";
 }
  cout << endl;
  v.clear();//清除所有元素
  cout << v.size();//輸出當前容器元素個數
 
  return 0;
 }

相關焦點

  • 《STL 源碼剖析》學習筆記之容器(一)vector
    1、容器的概觀與分類容器,置物之所也。所謂序列式容器,其中的元素都可序(ordered),但未排序(sorted)。2、vector 容器先來看看 vector 的源碼。以下是 vector 定義式的源碼摘錄。雖然 STL規定,欲使用vector者必須先含入,但 SGI STL 將 vector 實作於更底層的<stl_vector.h>。不要被這一部分源碼嚇跑,如果閱讀源碼有困難,可以先跳過這部分,直接看後面的註解。
  • C++提高第三篇2 STL常用容器 vector
    = v.end(); it++) { cout << *it << " "; } cout << endl;}函數printVector後文多次使用,列印示例中vector容器的數據。
  • STL教程(3) : Vector
    它的底層利用了C++類模板和函數模板的機制,由三大部分組成:容器、算法和迭代器。    目前STL有六大組件容器 container算法 algorthm迭代器 iterator仿函數 function object適配器 adaptor空間配置器 allocator    vector是將元素放到動態數組中加以管理的容器。
  • vector容器
    動態擴展:並不是在原有空間上續接空間,而是尋找更大的空間,然後將原來數據拷貝到新空間,釋放原有空間vector容器是支持隨機訪問的迭代器vector構造函數:功能:創造vector容器函數原型:vector<T> v; //採用類模板實現默認的構造函數
  • C++:STL基礎與數組vector
    容器 算法 迭代器 仿函數 適配器(配接器) 空間配置器1、容器:各種數據結構,如vector list deque set map等2、算法:各種常用算法:sort find copy for_each3、迭代器:扮演了容器與算法之間的粘合劑4、仿函數:行為類似於函數,可作為算法的某種策略5、適配器:一種用來修飾容器或者仿函數或者迭代器接口的東西
  • C++ vector用法詳解
    vector概述  vector是種容器,類似數組一樣,但它的size可以動態改變。  vector的元素在內存中連續排列,這一點跟數組一樣。這意味著我們元素的索引將非常快,而且也可以通過指針的偏移來獲取vector中的元素。
  • C++11學習 - Array的用法與vector用法
    作者丨淡淡_小孩https://blog.51cto.com/13475106/2554602C++11學習 - Array的用法與
  • C++STL(一)----string和vector
    (t2); auto at = qwe.begin(); for (; at !=;> q; vector<char> v1(test,test+4); vector<char> v2(test1,test1+4); vector<char> v3(test2,test2+4); q.push_back(v1); q.push_back(v2); q.push_back(v3); auto at
  • STL queue容器用法
    queue 容器,又稱隊列容器,是簡單地裝飾deque容器而成為另外的一種容器。二、容器特性1.雙開口容器實際上該容器模擬的就是隊列存儲結構,只能從尾部插入元素,只能從頭部刪除元素。reference  front();      獲取隊頭元素reference  back();       獲取隊尾元素void pop();  刪除隊頭元素5.判斷函數6.大小函數7.其他函數四、基本用法
  • ​跟我學C++中級篇——STL的容器vector
    一、順序容器vectorC++程式設計師中,如果用到過STL,那麼一定肯定用過vector,這個是最常見,最初步的一個數據類型。上一篇提到的array遠遠比不上它。畢竟那玩意兒相對vector是很久遠後才提出來的。在這之前,std::vector承擔了多少小菜鳥處理數組各種問題的最優選方法。不用處理內存,可以刪除,任意增加不考慮越界。那簡直是一種最單純質樸的快樂。
  • C++ vector 使用注意事項
    添加元素:push_back通過push_back添加新的元素進入vector後,vector的內存有時候會發生變化,這取決於size和capacity大小,當然這些都是系統來處理的,詳細可以參考stl源碼當size<capacity的時候,直接加到末尾,不會變化當size==capacity的時候,會重新申請另外一塊內存
  • C++(STL):02---tuple容器
    :如果兩個容器具有相同大小且所有元素都兩兩對應相等,則兩容器相等;否則不相等如果兩個容器大小不相同,但較小容器中每個元素都等於較大容器中對應元素,則較小容器小於較大容器如果兩個容器都不是另一個容器的前綴子序列,則它們的比較結果取決於第一個不相等元素的比較結果tuple與STL容器的比較規則類似,但是:只有兩個tuple具有相同數量的成員時才可以進行比較
  • c vector用法是什麼
    在c 中,vector是一個十分有用的容器,c vector用法是:
  • C++ vector容器強制釋放內存
    換個話題,聊聊使用C++ STL vector容器時的一個內存管理問題。
  • 刷題、找工作,不會STL怎麼行?vector篇
    C++ vector全世界開發者都在使用的容器,它的原理必然是無比縝密的,當中的任何一個值任何一個設計方法都不可能是憑空來的,一定是經過前人思考和實驗的。前文說了,每次擴容都會重新申請一塊更大的內存,這個在我們看來是理所應當的,但這個更大究竟是多大就很難描述了。如果新申請的內存過大,可能會造成浪費。
  • STL精髓之容器篇(上)
    最近他在學習使用STL的各種容器,感覺已經用得很熟練了,很想知道自己到底學得如何了,於是他在微信上給「樹老師」發信息,說明了此事。樹老師對小軒的學習能力一直很滿意,之前C++入門的知識他都學得很快很好。於是就說,那我就來幫你檢驗一下吧。對話開始。樹:請問sizeof(std::vector<T>)結果是多少?與T的具體類型有關麼?
  • C++ STL 容器如何解決線程安全的問題?
    眾所周知,STL容器不是線程安全的。對於vector,即使寫方(生產者)是單線程寫入,但是並發讀的時候,由於潛在的內存重新申請和對象複製問題,會導致讀方(消費者)的迭代器失效。實際表現也就是招致了core dump。另外一種情況,如果是多個寫方,並發的push_back(),也會導致core dump。
  • 乾貨 |名企高頻考點之-C++ STL vector底層實現
    vector底層實際是泛型的動態類型順序表,因此其底層實際是一段連續的空間。在SGI-STL的vector中,實際在底層使用三個指針指向該段連續空間的,如下:底層是連續空間,並且vector重載了[]下標運算符,用戶可以向使用數組的方式訪問vector中的每一個元素,即支持隨機訪問,但vector不適宜做任意位置的插入和刪除操作,因為要進行大量元素的搬移,比如插入:
  • 【C++概念】---vector用法
    在c++中,vector是一個十分有用的容器,下面對這個容器做一下總結。
  • C++ STL快速入門
    STL容器是STL學習中要重點關注的,STL容器有兩大類,順序容器和關聯容器。順序容器有可變長動態數組vector、雙端隊列deque、雙向鍊表list,它們之所以被稱為順序容器,是因為元素在容器中的位置同元素的值無關,即容器不是排序的。將元素插入容器時,指定在什麼位置(尾部、頭部或中間某處)插入,元素就會位於什麼位置。