c++ vector 赋值_C++中vector用法
vector是什么
??????? vector是C++標準模板庫(STL-Standard Template Library)中的概念內(nèi)容,它是一個能夠操作多種數(shù)據(jù)結(jié)構(gòu)和算法的模板類和函數(shù)庫,是一個封裝了動態(tài)大小數(shù)組的順序容器(Sequence Container)。vector被認為是一個容器,也是因為它能夠像容器一樣存放各種類型的對象,可以簡單的認為,vector是一個能夠存放任意類型的動態(tài)數(shù)組。
擴展知識:
STL的代碼從廣義上講分為三類:algorithm(算法)、container(容器)和iterator(迭代器),幾乎所有的代碼都采用了模板類和模板函數(shù)的方式,這相比于傳統(tǒng)的由函數(shù)和類組成的庫來說提供了更好的代碼重用機會。
模板是C++程序設計語言中的一個重要特征,而標準模板庫正是基于此特征。標準模板庫使得C++編程語言在有了同Java一樣強大的類庫的同時,保有了更大的可擴展性。
容器:包含、放置數(shù)據(jù)的地方。
迭代器:在容器中指出一個位置、或成對使用以劃定一個區(qū)域,用來限定操作所涉及到的數(shù)據(jù)范圍。
算法:要執(zhí)行的操作。
容器特性
關于STL容器,最令人稱贊的特性之一就是只要不超過它們的最大容許元素數(shù)量值(容量),它們就可以自動增長到足以容納放進去的數(shù)據(jù)(要想知道這個最大值,調(diào)用max_size的容器的內(nèi)置成員函數(shù)即可,使用reserve()函數(shù)可以提前設定容量大小)。
1.順序序列
順序容器中的元素按照嚴格的線性順序排序??梢酝ㄟ^元素在序列中的位置訪問對應的元素。
2.動態(tài)數(shù)組
支持對序列中的任意元素進行快速直接訪問,甚至可以通過指針算述進行該操作。操供了在序列末尾相對快速地添加/刪除元素的操作。
3.能夠感知內(nèi)存分配器的(Allocator-aware)
容器使用一個內(nèi)存分配器對象來動態(tài)地處理它的存儲需求。
vector內(nèi)置基本函數(shù)
(往右滑動可看全表格信息)
| 構(gòu)造函數(shù): | |
| vector() | 創(chuàng)建一個空vector |
| vector(int nSize) | 創(chuàng)建一個vector,元素個數(shù)為nSize |
| vector(int nSize,const t& t) | 創(chuàng)建一個vector,元素個數(shù)為nSize,且值均為t |
| vector(const vector&) | 復制構(gòu)造函數(shù) |
| vector(begin,end) | 復制[begin,end)區(qū)間內(nèi)另一個數(shù)組的元素到vector中 |
| 增加函數(shù): | |
| 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)間的數(shù)據(jù) |
| 刪除函數(shù): | |
| iterator erase(iterator it) | 刪除向量中迭代器指向元素 |
| iterator erase(iterator first,iterator last) | 刪除向量中[first,last)中元素 |
| void pop_back() | 刪除向量中最后一個元素 |
| void clear() | 清空向量中所有元素 |
| 遍歷函數(shù): | |
| reference at(int pos) | 返回pos位置元素的引用 |
| reference front() | 返回首元素的引用 |
| reference back() | 返回尾元素的引用 |
| iterator begin() | 返回向量頭指針,指向第一個元素 |
| iterator end() | 返回向量尾指針,指向向量最后一個元素的下一個位置 |
| reverse_iterator rbegin() | 反向迭代器,指向最后一個元素 |
| reverse_iterator rend() | 反向迭代器,指向第一個元素之前的位置 |
| 判斷函數(shù): | |
| bool empty() const | 判斷向量是否為空,若為空,則向量中無元素 |
| 大小函數(shù): | |
| int size() const | 返回向量中元素的個數(shù)(實際數(shù)據(jù)的個數(shù)) |
| int max_size() const | 返回最大可允許的vector元素數(shù)量值 |
| int capacity() const | 返回當前向量所能容納的最大元素值 |
| 其他函數(shù): | |
| void swap(vector&) | 交換兩個同類型向量的數(shù)據(jù) |
| 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型元素的向量(尖括號為元素類型名,它可以是任何合法的數(shù)據(jù)類型),不具有初值,其值不確定 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); //從數(shù)組中獲得初值 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對象的常用函數(shù)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(不包括它)結(jié)束 a.erase(a.begin()+1,a.begin()+3); //在a的最后一個向量后插入一個元素,其值為5 a.push_back(5); //在a的第一個元素(從第0個算起)位置插入數(shù)值5, a.insert(a.begin()+1,5); //在a的第一個元素(從第0個算起)位置插入3個數(shù),其值都為5 a.insert(a.begin()+1,3,5); //b為數(shù)組,在a的第一個元素(從第0個元素算起)的位置插入b的第三個元素到第5個元素(不包括b+6) a.insert(a.begin()+1,b+3,b+6); //返回a中元素的個數(shù) a.size(); //返回a在內(nèi)存中總共可以容納的元素個數(shù) a.capacity(); //將a的現(xiàn)有元素個數(shù)調(diào)整至10個,多則刪,少則補,其值隨機 a.resize(10); //將a的現(xiàn)有元素個數(shù)調(diào)整至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作為函數(shù)的參數(shù)或者返回值時,需要注意寫法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開發(fā)vi/vim使用知多少
>手機屏幕封裝技術及其分類相關知識
>我應該更早一點認識Git
>大端小端詳解(含代碼及詳細注釋)
>你真的了解開源嗎
>淺談ARM ABI,Android ABI
>CPU、ARM、架構(gòu)(及指令集)關系
>我畢業(yè)了(來自小學妹的畢業(yè)隨筆)
如果覺得文章有用,幫忙點贊或在看,給個心里安慰
總結(jié)
以上是生活随笔為你收集整理的c++ vector 赋值_C++中vector用法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 26个音序的正确写法和占格_别让瞎练毁了
- 下一篇: c++ 定时器_【话说定时器系列】之十: