介紹
向量(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;
}