C 之 Vector陣列基礎用法介紹

2021-09-12 01:44:55 字數 3541 閱讀 2214

目錄前言

一、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的動態陣...