在c++中,通常使用陣列來存放一組具有相同資料型別的資料,但是陣列在使用前必須先確定其大小。
stl中提供了vector類,即動態陣列。既然是陣列,vector自然具有陣列的一些特徵,比如下標從零開始、
可以通過下標來訪問陣列中的資料元素等,不同的是:vector具有容量動態增長的能力,而不像普通陣列
一樣其容量一旦確定就不能修改。
下面我們來學習一下vector的基本用法。
vector類為使用者提供了許多函式,比較常用的有以下:
1、建構函式
[cpp]
view plain
copy
print?
vector()
//建立乙個空的vector物件, t為vector存放的元素型別(下同)
vector(int
size)
//建立乙個大小為size的vector物件
vector(int
size, t t)
//建立乙個大小為size, 各元素值均為t的vector物件
2、往vector中新增元素
[cpp]
view plain
copy
print?
void
push_back(t t)
//在vector的尾部增加乙個元素
iterator insert(iterator iter, t t)
//在vector中某一元素前插入乙個元素t,iterator為迭代器
void
insert(iterator iter,
intn, t t)
//在vector中某一元素錢插入n個相同的元素t
void
insert(iterator iter, iterator first, iterator last)
//在vector中某一元素錢插入另乙個相同型別vector中[first, last)間的資料
3、刪除元素
[cpp]
view plain
copy
print?
iterator erase(iterator iter)
//刪除vector中某乙個元素
iterator erase(iterator first, iterator last)
//刪除vector中[first, last)中的元素
void
clear()
//刪除vector中的所有元素
4、遍歷vector
[cpp]
view plain
copy
print?
t at(
inti)
//返回下標為i位置的元素
t front()//返回首元素
t back()//返回尾元素
iterator begin()//返回vector的頭指標,指向第乙個元素
iterator end()//返回vector的尾指標,指向最後乙個元素的下乙個位置
reverse_iterator rbegin()//反向迭代器,返回最後乙個元素的迭代指標
reverse_iterator rend()//反向迭代器, 返回第乙個元素錢乙個位置的迭代指標
5、其他
[cpp]
view plain
copy
print?
bool
empty()
//判斷vector是否為空
intsize()
//返回vector中元素個數
intcapacity()
//返回當前vector的最大容量
void
assign(
intn, t t)
//將vector中第n個元素設定為t
接下來通過乙個具體的例子來看看上述函式的簡單用法
[cpp]
view plain
copy
print?
#include
#include
using
namespace
std;
intmain(
void
) printf("\n通過引用方式輸出\n"
); for
(int
i = 0; i
< size; i++)
printf("\n通過迭代器輸出\n"
); vector>::iterator iter1 = int_vec.begin();
while
(iter1 != int_vec.end())
printf("\n通過反向迭代器輸出\n"
); vector>::reverse_iterator iter2 = int_vec.rbegin();
while
(iter2 != int_vec.rend())
printf("\n下面測試修改元素\n"
); printf("通過陣列下標方式修改第乙個元素。"
); int_vec[0] = 5;
printf("修改後第乙個元素為:%d\n"
, int_vec[0]);
printf("通過引用方式修改第二個元素。"
); int
&p = int_vec.at(1);
p = 6;
printf("修改後的第二個元素為:%d\n"
, p);
printf("通過迭代器修改第三個元素。"
); vector>::iterator iter3 = int_vec.begin()+2;
*iter3 = 7;
printf("修改後第三個元素為:%d\n"
, *iter3);
printf("\n下面測試刪除元素\n"
); printf("刪除第乙個元素後,剩餘元素為:
");
int_vec.erase(int_vec.begin());
for(
inti = 0; i
< int_vec.size(); i++)
printf("\n刪除第1~3個元素後,剩餘元素為:
");
int_vec.erase(int_vec.begin(), int_vec.begin()+2);
for(
inti = 0; i
< int_vec.size(); i++)
return
0; }
輸出:下面測試輸出
通過陣列方式輸出
1 2 3 4 5
通過引用方式輸出
1 2 3 4 5
通過迭代器輸出
1 2 3 4 5
通過反向迭代器輸出
5 4 3 2 1
下面測試修改元素
通過陣列下標方式修改第乙個元素。修改後第乙個元素為: 5
通過引用方式修改第二個元素。修改後的第二個元素為: 6
通過迭代器修改第三個元素。修改後第三個元素為: 7
下面測試刪除元素
刪除第乙個元素後,剩餘元素為: 6 7 4 5
刪除第1~3個元素後,剩餘元素為: 4 5
vector的 陣列 用法陷阱
vector類為內建陣列提供了一種替代表示,與string類一樣 vector 類是隨標準 c 引入的標準庫的一部分 為了使用vector 我們必須包含相關的標頭檔案 include 使用vector有兩種不同的形式,即所謂的陣列習慣和 stl習慣。1.定義乙個已知長度的 vector vector...
C 之 Vector陣列基礎用法介紹
目錄前言 一 vector陣列簡介 1 引入 2 vector陣列概念 二 vector陣列用法 1 陣列的初始化 1.建構函式 2.常用初始化方式 示例 3.通過insert初始化 2 vector的用法 3 vector的演算法 在寫c 的時候,經常會遇到vector陣列,特別是在學習openc...
C 中vector的用法
c 內建的陣列支援容器的機制,但是它不支援容器抽象的語義。要解決此問題我們自己實現這樣的類。在標準c 中,用容器向量 vector 實現。容器向量也是乙個類模板。標準庫vector型別使用需要的標頭檔案 include vector 是乙個類模板。不是一種資料型別,vector是一種資料型別。vec...