c++ vector 赋值_C++中vector用法
vector是什么
??????? vector是C++標準模板庫(STL-Standard Template Library)中的概念內容,它是一個能夠操作多種數據結構和算法的模板類和函數庫,是一個封裝了動態大小數組的順序容器(Sequence Container)。vector被認為是一個容器,也是因為它能夠像容器一樣存放各種類型的對象,可以簡單的認為,vector是一個能夠存放任意類型的動態數組。
擴展知識:
STL的代碼從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),幾乎所有的代碼都采用了模板類和模板函數的方式,這相比于傳統的由函數和類組成的庫來說提供了更好的代碼重用機會。
模板是C++程序設計語言中的一個重要特征,而標準模板庫正是基于此特征。標準模板庫使得C++編程語言在有了同Java一樣強大的類庫的同時,保有了更大的可擴展性。
容器:包含、放置數據的地方。
迭代器:在容器中指出一個位置、或成對使用以劃定一個區域,用來限定操作所涉及到的數據范圍。
算法:要執行的操作。
容器特性
關于STL容器,最令人稱贊的特性之一就是只要不超過它們的最大容許元素數量值(容量),它們就可以自動增長到足以容納放進去的數據(要想知道這個最大值,調用max_size的容器的內置成員函數即可,使用reserve()函數可以提前設定容量大小)。
1.順序序列
順序容器中的元素按照嚴格的線性順序排序。可以通過元素在序列中的位置訪問對應的元素。
2.動態數組
支持對序列中的任意元素進行快速直接訪問,甚至可以通過指針算述進行該操作。操供了在序列末尾相對快速地添加/刪除元素的操作。
3.能夠感知內存分配器的(Allocator-aware)
容器使用一個內存分配器對象來動態地處理它的存儲需求。
vector內置基本函數
(往右滑動可看全表格信息)
| 構造函數: | |
| 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中 |
| 增加函數: | |
| 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)間的數據 |
| 刪除函數: | |
| iterator erase(iterator it) | 刪除向量中迭代器指向元素 |
| iterator erase(iterator first,iterator last) | 刪除向量中[first,last)中元素 |
| void pop_back() | 刪除向量中最后一個元素 |
| void clear() | 清空向量中所有元素 |
| 遍歷函數: | |
| reference at(int pos) | 返回pos位置元素的引用 |
| reference front() | 返回首元素的引用 |
| reference back() | 返回尾元素的引用 |
| iterator begin() | 返回向量頭指針,指向第一個元素 |
| iterator end() | 返回向量尾指針,指向向量最后一個元素的下一個位置 |
| reverse_iterator rbegin() | 反向迭代器,指向最后一個元素 |
| reverse_iterator rend() | 反向迭代器,指向第一個元素之前的位置 |
| 判斷函數: | |
| bool empty() const | 判斷向量是否為空,若為空,則向量中無元素 |
| 大小函數: | |
| int size() const | 返回向量中元素的個數(實際數據的個數) |
| int max_size() const | 返回最大可允許的vector元素數量值 |
| int capacity() const | 返回當前向量所能容納的最大元素值 |
| 其他函數: | |
| void swap(vector&) | 交換兩個同類型向量的數據 |
| void assign(int n,const T& x) | 設置向量中第n個元素的值為x |
| void assign(const_iterator first, const_iterator last) | 向量中[first,last)中元素設置成當前向量元素 |
代碼eg
vector對象的初始化eg:
假設定義的是int型vector向量,可以有如下方式:
//定義具有10個int型元素的向量(尖括號為元素類型名,它可以是任何合法的數據類型),不具有初值,其值不確定 vectora(10); //定義具有10個整型元素的向量,且給出的每個元素初值為1 vectora(10,1); //用向量b給向量a賦值,a的值完全等價于b的值 vectora(b); //將向量b中從0-2(共三個)的元素賦值給a,a的類型為int型 vectora(b.begin(),b.begin+3); //從數組中獲得初值 int b[7]={1,2,3,4,5,6,7}; vector a(b,b+7);定義其他類型的vector,如使用自定義的枚舉型eg:
typedef enum { EVENT_A = -1 EVENT_B, EVENT_C, EVENT_UNKNOWN, } event_type_t; //定義一個自定義枚舉型vector Vector event;vector對象的常用函數eg:
//包含頭文件 #include //定義int型vector向量a和b vector a,b; //b為向量,將b的0-2個元素賦值給向量a a.assign(b.begin(),b.begin()+3); //a含有4個值為2的元素 a.assign(4,2); //返回a的最后一個元素 a.back(); //返回a的第一個元素 a.front(); //返回a的第i元素,當且僅當a存在 a[i]; //清空a中的元素 a.clear(); //判斷a是否為空,空則返回true,非空則返回false a.empty(); //刪除a向量的最后一個元素 a.pop_back(); //刪除a中第一個(從第0個算起)到第二個元素,也就是說刪除的元素從a.begin()+1算起(包括它)一直到a.begin()+3(不包括它)結束 a.erase(a.begin()+1,a.begin()+3); //在a的最后一個向量后插入一個元素,其值為5 a.push_back(5); //在a的第一個元素(從第0個算起)位置插入數值5, a.insert(a.begin()+1,5); //在a的第一個元素(從第0個算起)位置插入3個數,其值都為5 a.insert(a.begin()+1,3,5); //b為數組,在a的第一個元素(從第0個元素算起)的位置插入b的第三個元素到第5個元素(不包括b+6) a.insert(a.begin()+1,b+3,b+6); //返回a中元素的個數 a.size(); //返回a在內存中總共可以容納的元素個數 a.capacity(); //將a的現有元素個數調整至10個,多則刪,少則補,其值隨機 a.resize(10); //將a的現有元素個數調整至10個,多則刪,少則補,其值為2 a.resize(10,2); //將a的容量擴充至100, a.reserve(100); //b為向量,將a中的元素和b中的元素整體交換 a.swap(b); //b為向量,向量的比較操作還有 != >= > <= < a==b用push_back給向量尾部增加多個元素,體會一下eg:
//定義一個int型vector vector a; //分別先后把5和10壓入vector,最后向量存儲是這樣:a[0]是5,a[1]就是10 a.push_back(5); a.push_back(10);用vector作為函數的參數或者返回值時,需要注意寫法eg:
//注意“&”,一定記得寫上,不能丟掉 double test(vector<int>&a, vector<int>&b)用迭代器iterator訪問vector元素eg:
vector a; //定義一個可以迭代int型vector的迭代器iter,并使它指向a的首位(地址) vector::iterator iter = a.begin(); //iter++指的是向后迭代一位,直到iter到超出末端迭代器為止,輸出迭代器iter指向的值 for( ; iter!=a.end(); iter++) cout<往期文章
>專輯 | C/C++細碎
>linux開發vi/vim使用知多少
>手機屏幕封裝技術及其分類相關知識
>我應該更早一點認識Git
>大端小端詳解(含代碼及詳細注釋)
>你真的了解開源嗎
>淺談ARM ABI,Android ABI
>CPU、ARM、架構(及指令集)關系
>我畢業了(來自小學妹的畢業隨筆)
如果覺得文章有用,幫忙點贊或在看,給個心里安慰
總結
以上是生活随笔為你收集整理的c++ vector 赋值_C++中vector用法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 26个音序的正确写法和占格_别让瞎练毁了
- 下一篇: s3c2440移植MQTT