目錄前言
一、vector陣列簡介
1、引入
2、vector陣列概念
二、vector陣列用法
1、陣列的初始化
1.建構函式
2.常用初始化方式**示例
3.通過insert初始化
2、vector的用法
3、vector的演算法
在寫c++**的時候,經常會遇到vector陣列,特別是在學習opencv的時候,經常會碰到vector陣列。
在c++中,vector是乙個十分有用的容器。那麼,他是乙個什麼樣的容器呢?
vector(向量)是乙個封裝了動態大小陣列的順序容器(sequence container)。跟任意其它型別容器一樣,它能夠存放各種型別的物件。可以簡單的認為,vector是乙個能夠存放任意型別的動態陣列,它可以增加和壓縮資料。
對於c++來說,vector在c++標準模板庫中的部分內容,它是乙個多功能的,能夠操作多種資料結構和演算法的模板類和函式庫。
vector陣列初始化呼叫了建構函式,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中
1.不帶引數的建構函式初始化這種方式是預設初始化,vector為空, size為0,表明容器中沒有元素,而且 capacity 也返回 0,意味著還沒有分配記憶體空間。適用於元素個數未知,需要在程式中動態新增的情況。
#includevectorvec1; //初始化乙個size為0的vector
2.帶引數的建構函式初始化(1)預設值初始化
vec2中將包含5個元素,每個元素進行預設的值初始化,對於int,也就是被賦值為0,因此vec2被初始化為包含5個0。當程式執行初期元素大致數量可預知,而元素的值需要動態獲取的時候,可採用這種初始化方式。
//初始化size,但每個元素值為預設值
vectorvec2(5); //初始化了5個預設值為0的元素
(2)指定值初始化
vec3被初始化為包含5個值為1的int。當程式執行初期元素大致數量可預知,而元素的值幾乎相同時,可採用這種初始化方式。
//初始化size,並且設定初始值
vectorvec3(5,1); //初始化了5個值為1的元素
(3)複製建構函式初始化
複製建構函式有兩種方式,這兩種方式等價 ,後者初始化為前者的拷貝,兩者型別必須相同,也就是同為int的vector型別,初始化後,兩者具有相同的容量和元素,適用於兩個陣列型別相同時的重新命名或資料傳遞等情況。
vectorvec4 = vec2;
vectorvec5(vec2)
(4)直接賦值初始化
初始化為列表中元素的拷貝,列表中元素必須與vec6的元素型別相容,本例中必須是與整數型別相容的型別,整形會直接拷貝,其他型別會進行型別轉換。
vectorvec6 = ;
vectorvec7;
用insert初始化vector陣列的方法有很多,廢話不多說,用**說話。
//insert初始化方式將同型別的迭代器對應的始末區間(左閉右開區間)內的值插入到vector中
vectorvec8;
//將vec2[0]~vec2[2]插入到vec8中,vec8.size()由0變為3
vec8.insert(vec8.begin(), vec2.begin(), vec2.begin() + 3);
//insert可以插入m個值為n的元素
//在vec8開始位置處插入6個6
vec8.insert(vec8.begin(), 6, 6);
//insert也可通過陣列位址區間實現插入
int a[6] = ;
vectorvec9;
//將a的所有元素插入到b中
vec9.insert(vec9.begin(), a, a + 7);
相關用法,請看**
//1.尾部插入及刪除數字
vec2.push_back(1); //尾部插入元素
vec2.pop_back() //刪除尾部元素
//2.使用下標訪問元素,
cout << vec2[0] << endl; //記住下標是從0開始的。
//3.使用迭代器訪問元素.
vector::iterator it;
for (it = vec2.begin(); it != vec2.end(); it++)
cout << *it << endl;
//4.插入元素:
vec2.insert(vec2.begin() + i, a); //在第i + 1個元素前面插入a;
//5.刪除元素:
vec2.erase(vec2.begin() + 2); //刪除第3個元素
vec2.erase(vec2.begin() + i, vec2.end() + j); //刪除區間[i, j - 1]; 區間從0開始
//6.求陣列大小:
vec2.size();
//7.清空 :
vec2.clear();
主要有兩個演算法,乙個是逆序,乙個是排序,其他演算法我們都可以自己編寫,把這兩個演算法分享給大家:
注意,sort函式要新增標頭檔案:
#include
演算法如下:
//1.將元素逆序
reverse(vec2.begin(), vec2.end()); //將元素翻轉,即逆序排列!
//2.將元素排序
sort(vec2.begin(), vec2.end()); //(預設是按公升序排列, 即從小到大).
Vector 不定長陣列基礎用法
好久沒寫了呢,markdown的用法都忘得七七八八了。今天在看網路流的問題,挑戰上的演算法設計vector 之前就沒看懂,這次稍微統計一下用法,一些基礎方法什麼的 在c 中,vector是乙個十分有用的容器,下面對這個容器做一下總結。1 基本操作 1 標頭檔案 include.2 建立vector物...
C 容器基礎之vector
vector是線性容器,元素按照線性順序排序,容器中元素儲存在一塊連續的記憶體中,類似與陣列,不過vector可以自動增長或縮小儲存空間。和其他標準的順序容器相比 vector可以更有效的訪問容器內元素,和在末尾新增 刪除元素 而在其他位置的新增刪除元素,vector不如其他順序容器。注意 size...
C 容器之動態陣列vector
定義vector物件的時候先不用指定陣列的大小,有資料的化就往陣列裡面插入就可以了。vector內部自己管理儲存空間。include 注意沒有.h using namespace std vector是乙個類模板,可以定義任何型別 例 vector arr int 定義了乙個內部元素是int的動態陣...