C++ vector總結

介紹

向量(Vector)是一個封裝了動態大小數組的順序容器(Sequence Container)。跟任意其它類型容器一樣,它能夠存放各種類型的對象。可以簡單的認為,向量是一個能夠存放任意類型的動態數組。

在 vector 容器中,根據下標隨機訪問某個元素的時間是常數,在尾部添加一個元素的時間大多數情況下也是常數,總體來說速度很快。

在中間插入或刪除元素時,因為要移動多個元素,因此速度較慢,平均花費的時間和容器中的元素個數成正比。

常用函數

vector()

無參構造函數,將容器初始化為空

vector(int n)

將容器初始化為有 n 個元素

vector(int n, const T & val)

假定元素的類型是 T,此構造函數將容器初始化為有 n 個元素,每 個元素的值都是 val

vector(iterator first, iterator last)

first 和 last 可以是其他容器的迭代器。一般來說,本構造函數初始化的結果就是將 vector 容器的內容變成與其他容器上的區間 [first, last) —致

void assign(int n,const T& x)

設置向量中第n個元素的值為x

void clear()

刪除所有元素

bool empty()

判斷容器是否為空

void pop_back()

刪除容器末尾的元素

void push_back( const T & val)

將 val 添加到容器末尾

int size()

返回容器中元素的個數

Int capacity()

當前vector分配的大小

reference at(int pos)

返回pos位置元素的引用

T & front()

返回容器中第一個元素的引用

T & back()

返回容器中最後一個元素的引用

iterator begin()

返回向量頭指針,指向第一個元素

iterator end()

返回向量尾指針,指向向量最後一個元素的下一個位置

reverse_iterator rbegin()

反向迭代器,指向最後一個元素

reverse_iterator rend()

反向迭代器,指向第一個元素之前的位置

iterator insert(iterator i, const T & val)

將 val 插入迭代器 i 指向的位置,返回 i

iterator insert( iterator i, iterator first, iterator last)

將其他容器上的區間 [first, last) 中的元素插入迭代器 i 指向的位置

iterator erase(iterator i)

刪除迭代器 i 指向的元素,返回值是被刪元素後面的元素的迭代器

iterator erase(iterator first, iterator last)

刪除容器中的區間 [first, last)

void swap( vector & v)

將容器自身的內容和另一個同類型的容器 v 互換

函數實例

1、初始化vector

(1) vector a(10); //定義了10個整型元素的向量(尖括號中為元素類型名,它可以是任何合法的數據類型),但沒有給出初值,其值是不確定的。

(2)vector a(10,1); //定義了10個整型元素的向量,且給出每個元素的初值為1

(3)vector a(b); //用b向量來創建a向量,整體複製性賦值

(4)vector a(b.begin(),b.begin+3); //定義了a值為b中第0個到第2個(共3個)元素

(5)int b[7]={1,2,3,4,5,9,8};

vector a(b,b+7); //從數組中獲得初值

2、遍歷

#include

#include

using namespace std;

int main() {

vector myVector(10, 22);

//通過下角標遍歷。

for (auto i = 0; i < myVector.size(); i++)

{

cout << " " << myVector[i];

}

cout << "\n";

myVector.push_back(44);

//通過迭代器遍歷

for (auto i = myVector.begin(); i != myVector.end(); i++)

{

cout << " " << *i;

}

cout << "\n";

return 0;

}

3、修改元素的值

// list::sort

#include

#include

#include

#include

using namespace std;

int main() {

vector myVector(10, 22);

//通過下角標遍歷。

for (auto i = 0; i < myVector.size(); i++)

{

myVector[i]=55;

}

cout << "\n";

//通過下角標遍歷。

for (auto i = 0; i < myVector.size(); i++)

{

cout << " " << myVector[i];

}

cout << "\n";

myVector.push_back(44);

//通過迭代器遍歷修改元素的值。

for (auto i = myVector.begin(); i != myVector.end(); i++)

{

if (*i == 55)

{

*i = 33;

}

}

cout << "\n";

for (auto i = myVector.begin(); i != myVector.end(); i++)

{

cout << " " << *i;

}

return 0;

}

4、刪除元素

#include

#include

#include

#include

using namespace std;


int main() {

vector myVector = {1,2,3,4,5,6,7,8,9,11};

//通過下角標刪除。

for (auto i = 0; i < myVector.size(); i++)

{

if (i == 4)

{

myVector.erase(myVector.begin()+4);

}

}

cout << "\n";

//通過迭代器遍歷刪除。

for (auto i = myVector.begin(); i != myVector.end();)

{

if (*i == 7)

{

i=myVector.erase(i);

}

else

{

i++;

}

}

cout << "\n";

for (auto i = myVector.begin(); i != myVector.end();i++)

{

cout << " "

<< *i;

}

cout << "\n";

return 0;

}

5、排序

// list::sort

#include

#include

#include

using namespace std;

bool compar(int a, int b)

{

return a > b;

}

int main() {

vector myVector = { 1,2,4,3,5,6,7,8,9,11 };

sort(myVector.begin(), myVector.end());

for (auto i = myVector.begin(); i != myVector.end(); i++)

{

cout << " " << *i;

}

cout << "\n";

sort(myVector.begin(), myVector.end(),compar);

for (auto i = myVector.begin(); i != myVector.end(); i++)

{

cout << " " << *i;

}

cout << "\n";

return 0;

}


分享到:


相關文章: