新聞中心
vector是最常用的容器之一,功能十分強大,可以儲存、管理各種類型的數(shù)據(jù)。在很多情況下可以用來代替功能比較局限的普通數(shù)組,因為我們知道,普通數(shù)組只能實現(xiàn)一對一的映射而不能實現(xiàn)一對多的映射,vector就是專門為了解決這個問題而誕生的。vector也可以稱為動態(tài)數(shù)組,因為其大小是根據(jù)實時更新而變化的,正因為如此vector顯得更加靈活易用。
舉個例子
小明擁有一根香蕉和兩個蘋果
小芳擁有一根棒棒糖個三個梨
那么你試著思考一下,應(yīng)當(dāng)如何在程序中表示這種結(jié)構(gòu)呢?這就是一對多映射的例子,學(xué)完vector就可以輕松解決這個問題了。
vector<儲存的類型>容器名
如:
儲存int型的值 vector
儲存double型的值 vector
儲存string型的值 vector
儲存結(jié)構(gòu)體或者類的值的值 vector<結(jié)構(gòu)體名>v;
當(dāng)然也可以定義vector數(shù)組:
儲存int型的值 vector
儲存double型的值 vector
等等,n為數(shù)組的大小
//這些都是必會的成員函數(shù)
size()//返回返回容器中元素個數(shù)
begin()//返回頭部迭代器
end()//返回尾部+1迭代器
rbegin()//返回逆首部迭代器
rend()//返回逆尾部-1迭代器
front()//返回首個元素
back()//返回尾部元素
push_back()//在末尾添加一個函數(shù)
emplace_back()//和push_back()是一樣的作用
pop_back()//彈出最后一個元素
empty()//判斷是否為空
insert()//在指定位置插入元素
erase()//在指定位置刪除元素
clear()//清空容器
詳細(xì)解析:
(1)size()
size()是最常用的成員函數(shù)了,常用于vector的遍歷和元素個數(shù)的查詢
(2)push_back()
出了初始化以外,push_back()是vector最重要的修改函數(shù)了,復(fù)雜度為O(1),而insert()的復(fù)雜度為O(n),差距明顯
(3)front()、back()
查詢首元素和未元素,其實通過隨機訪問,v[0]、v[v.size()-1]是可以達(dá)到相同效果的,用front()和back()顯得專業(yè)點
(4)begin()、end()
通常用來方便排序的,也可以用來遍歷,但沒必要,通過下標(biāo)遍歷更簡單快捷,rbegin()、rend()則可以用來逆序排序
(5)insert()
insert (position, x );
insert (position, n, x );
insert (position, first, last );
插入新的元素,
第一個函數(shù),在迭代器指定的位置前插入值為x的元素
第二個函數(shù),在迭代器指定的位置前插入n個值為x的元素
第三個函數(shù),在迭代器指定的位置前插入另外一個容器的一段序列迭代器first到last
復(fù)雜度很高,迫不得已不使用
(6)erase()
erase ( position );
erase (first, last );
刪除元素或一段序列
同樣地,復(fù)雜度很高,迫不得已不使用
示例代碼:
#include//c++標(biāo)準(zhǔn)頭文件,可以使用cout,cin等標(biāo)準(zhǔn)編譯用法
#include//使用vector時需要的頭文件
#include//包含許多內(nèi)置函數(shù),如排序、倒置、交換等函數(shù)
using namespace std;//命名空間,防止重名給程序帶來各種隱患,使用cin,cout,map,set,vector,queue時都要使用
//遍歷函數(shù)
void print(auto v){for(auto c:v){cout<vectorv;//定義一個 int型vector
v.emplace_back(3);
v.emplace_back(4);
v.emplace_back(1);
v.emplace_back(2);
cout<<"現(xiàn)在有的元素 :";
print(v);
cout<5,6});
cout<<"插入5、6后: ";
print(v);
cout<
運行結(jié)果:
現(xiàn)在有的元素 :3 4 1 2
v.front()=3
v.back()=2
排序后 :1 2 3 4
v.front()=1
v.back()=4
v.size()=4
插入5、6后: 1 2 5 6 3 4
倒置后: 4 3 6 5 2 1
逆序排序后 :6 5 4 3 2 1
v.empty()=0
(v.size()==0)=0
v清空后
v.empty()=1
(v.size()==0)=1
4、vector的三種遍歷方法
(1)迭代器iterator代碼:
#include#includeusing namespace std;
int main(){vectorv;//定義
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
vector::iterator it;//使用迭代器
for(it=v.begin();it!=v.end();it++){cout<<*it<<' ';
}
}
運行結(jié)果:
1 3 2
(2)下標(biāo)遍歷代碼:
#include#includeusing namespace std;
int main(){vectorv;//定義
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
for(int i=0;icout<
運行結(jié)果:
1 3 2
(3)foreach遍歷代碼:
#include#includeusing namespace std;
int main(){vectorv;//定義
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
for(int c:v){cout<
運行結(jié)果:
1 3 2
兩種逆序遍歷:
代碼:
#include#includeusing namespace std;
int main(){vectorv;//定義
v.emplace_back(1);//插入元素1
v.emplace_back(3);//插入元素3
v.emplace_back(2);//插入元素2
// 迭代器法
vector::reverse_iterator it;//使用迭代器
for(it=v.rbegin();it!=v.rend();it++){cout<<*it<<' ';
}
cout<=0;i--){cout<
運行結(jié)果:
2 3 1
2 3 1
foreach雖然簡單易用,但是不支持逆序遍歷
有小伙伴發(fā)現(xiàn)dev不能編譯部分代碼,那是因為dev還未支持c++11,可以看這篇文章解決
dev使用c++11教程
是不是很簡單呢?
剛接觸肯定會覺得難,多些做題多些用,熟悉了就容易了,兄弟萌,加油?。?!
文章尚有不足,歡迎大牛們指正
感謝觀看,點個贊吧
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧
本文名稱:c++vector用法入門必看超詳細(xì)-創(chuàng)新互聯(lián)
網(wǎng)站地址:http://www.dlmjj.cn/article/csghhp.html