C++primer1-7章知識點總結——vector以及迭代器的相關運用

TinnCHEN發表於2019-02-12

vector

定義:vector也常被稱作容器,表示物件的集合,其中所有物件的型別都相同。集合中每個物件都有一個與之對應的索引,索引用於訪問物件。使用時需新增標頭檔案。vector是一個類别範本使用時需例項化
eg:

#include<vector>
#include<string>
using namespace std;
vector<int> ivec;               //ivec儲存int型別的物件
vector<vector<string>> file;    //該向量的元素是vector物件

/*儘管vector能容納絕大多數型別的物件作為其元素
  但引用不是物件
  因此不存在包含引用的vector。
  除此之外大多數(非引用)內建型別和類型別都可以構成vector物件
  甚至組成vector的元素也可以是vector
*/

定義和初始化vector

vector<T> v1;                          //v1是一個空vector,執行預設初始化
vector<T> v2(v1);                      //v2中包含有v1所有元素的副本
vector<T> v2 = v1;                     //等價於上一種初始化方式
vector<T> v3(n,val);                   //v3中包含了n個相同的val元素
vector<T> v4(n);                       //v4中包含了n個重複執行了值初始化的物件,值初始化是由物件中的元素型別決定的,如內建型別int會初始化為0,類型別string會被初始化為空string。
vector<T> v5{a, b, c, ...}             //v5包含了初始值個數的元素,每個元素被賦予相應的初始值
vector<T> v5 = {a, b, c, ...}          //等價於上一條

vector的主要相關操作

v.empty();
v.size();
v.push_back(t)   //使用這種方式新增元素不要使用下標形式新增
v[n];            //返回v中第n個位置上元素的引用
v1 = v1;
v1 = {a, b, c, ...};
v1 == v2;       //v1和v2當且僅當它們的元素數量相同且對應位置的元素值都相同
//主要遍歷方式
for(auto &i : v)
//或者
for(auto beg = v.begin(); v != v.end(); ++beg)
//一般來說我們不在意迭代器準確的型別是什麼,因此使用auto。
//c++在for迴圈中使用!=來判斷。
//第二種主要是用迭代器的相關操作也可用beg來返回vector的中元素的引用如:
*beg            //返回當前beg所指元素的引用
beg->men        //解引用beg並獲取該元素名為men的成員,等價於(*beg).men
//迭代器型別:
vector<int> :: iterator it;   //可讀寫
vector<int> :: const_iterator it;   //可讀不可寫

迭代器的經典操作二分搜尋

//text有序
auto beg = text.begin(), last = text.end();
auto mid = beg + (last - beg)/2;
while(mid != last && *mid != sought){        //sought為要尋找的目標
     if(sought < *mid)
         last = mid;
     else
         beg = mid + 1;
     mid = beg + (last - beg)/2;
 }

相關文章