詳解C++ STL vector容器訪問元素的幾種方式
學(xué)會(huì)如何創(chuàng)建并初始化 vector 容器之后,本節(jié)繼續(xù)來學(xué)習(xí)如何獲?。ㄉ踔列薷模┤萜髦写鎯?chǔ)的元素。
訪問vector容器中單個(gè)元素
首先,vector 容器可以向普通數(shù)組那樣訪問存儲(chǔ)的元素,甚至對指定下標(biāo)處的元素進(jìn)行修改,比如:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> values{1,2,3,4,5};
//獲取容器中首個(gè)元素
cout << values[0] << endl;
//修改容器中下標(biāo)為 0 的元素的值
values[0] = values[1] + values[2] + values[3] + values[4];
cout << values[0] << endl;
return 0;
}
運(yùn)行結(jié)果為:
1
14
顯然,vector 的索引從 0 開始,這和普通數(shù)組一樣。通過使用索引,總是可以訪問到 vector 容器中現(xiàn)有的元素。
值得一提的是,容器名[n]這種獲取元素的方式,需要確保下標(biāo) n 的值不會(huì)超過容器的容量(可以通過 capacity() 成員函數(shù)獲取),否則會(huì)發(fā)生越界訪問的錯(cuò)誤。幸運(yùn)的是,和 array 容器一樣,vector 容器也提供了 at() 成員函數(shù),當(dāng)傳給 at() 的索引會(huì)造成越界時(shí),會(huì)拋出std::out_of_range異常。
舉個(gè)例子:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> values{1,2,3,4,5};
//獲取容器中首個(gè)元素
cout << values.at(0) << endl;
//修改容器中下標(biāo)為 0 的元素的值
values.at(0) = values.at(1) + values.at(2) + values.at(3) + values.at(4);
cout << values.at(0) << endl;
//下面這條語句會(huì)發(fā)生 out_of_range 異常
//cout << values.at(5) << endl;
return 0;
}
運(yùn)行結(jié)果為:
1
14
讀者可能有這樣一個(gè)疑問,即為什么 vector 容器在重載 [] 運(yùn)算符時(shí),沒有實(shí)現(xiàn)邊界檢查的功能呢?答案很簡單,因?yàn)樾阅堋H绻看卧L問元素,都去檢查索引值,無疑會(huì)產(chǎn)生很多開銷。當(dāng)不存在越界訪問的可能時(shí),就能避免這種開銷。
除此之外,vector 容器還提供了 2 個(gè)成員函數(shù),即 front() 和 back(),它們分別返回 vector 容器中第一個(gè)和最后一個(gè)元素的引用,通過利用這 2 個(gè)函數(shù)返回的引用,可以訪問(甚至修改)容器中的首尾元素。
舉個(gè)例子:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> values{1,2,3,4,5};
cout << "values 首元素為:" << values.front() << endl;
cout << "values 尾元素為:" << values.back() << endl;
//修改首元素
values.front() = 10;
cout <<"values 新的首元素為:" << values.front() << endl;
//修改尾元素
values.back() = 20;
cout << "values 新的尾元素為:" << values.back() << endl;
return 0;
}
輸出結(jié)果為:
values 首元素為:1
values 尾元素為:5
values 新的首元素為:10
values 新的尾元素為:20
另外,vector 容器還提供了 data() 成員函數(shù),該函數(shù)的功能是返回指向容器中首個(gè)元素的指針。通過該指針也可以訪問甚至修改容器中的元素。比如:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> values{1,2,3,4,5};
//輸出容器中第 3 個(gè)元素的值
cout << *(values.data() + 2) << endl;
//修改容器中第 2 個(gè)元素的值
*(values.data() + 1) = 10;
cout << *(values.data() + 1) << endl;
return 0;
}
運(yùn)行結(jié)果為:
3
10
訪問vector容器中多個(gè)元素
如果想訪問 vector 容器中多個(gè)元素,可以借助 size() 成員函數(shù),該函數(shù)可以返回 vector 容器中實(shí)際存儲(chǔ)的元素個(gè)數(shù)。例如:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> values{1,2,3,4,5};
//從下標(biāo) 0 一直遍歷到 size()-1 處
for (int i = 0; i < values.size(); i++) {
cout << values[i] << " ";
}
return 0;
}
運(yùn)行結(jié)果為:
1 2 3 4 5
注意,這里不要使用 capacity() 成員函數(shù),因?yàn)樗祷氐氖?vector 容器的容量,而不是實(shí)際存儲(chǔ)元素的個(gè)數(shù),這兩者是有差別的。
關(guān)于 vector 容器 capacity() 和 size() 的差別,可以閱讀 《STL vector容量(capacity)和大?。╯ize)的區(qū)別》一文。
或者也可以使用基于范圍的循環(huán),此方式將會(huì)逐個(gè)遍歷容器中的元素。比如:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> values{1,2,3,4,5};
for (auto&& value : values)
cout << value << " ";
return 0;
}
運(yùn)行結(jié)果為:
1 2 3 4 5
另外還可以使用 vector 迭代器遍歷 vector 容器,這里以 begin()/end() 為例:
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> values{1,2,3,4,5};
for (auto first = values.begin(); first < values.end(); ++first) {
cout << *first << " ";
}
return 0;
}
運(yùn)行結(jié)果為:
1 2 3 4 5
當(dāng)然,這里也可以使用 rbegin()/rend()、cbegin()/cend()、crbegin()/crend() 以及全局函數(shù) begin()/end() ,它們都可以實(shí)現(xiàn)對容器中元素的訪問。
到此這篇關(guān)于詳解C++ STL vector容器訪問元素的幾種方式的文章就介紹到這了,更多相關(guān)C++ STL vector容器訪問元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
VC程序在Win32環(huán)境下動(dòng)態(tài)鏈接庫(DLL)編程原理
這篇文章主要介紹了VC程序在Win32環(huán)境下動(dòng)態(tài)鏈接庫(DLL)編程原理,包括了dll文件的原理與具體實(shí)現(xiàn)過程,對于深入掌握VC程序設(shè)計(jì)具有很好的參考借鑒價(jià)值,需要的朋友可以參考下2014-10-10
基于C語言實(shí)現(xiàn)圖書管理信息系統(tǒng)設(shè)計(jì)
這篇文章主要為大家詳細(xì)介紹了基于C語言實(shí)現(xiàn)圖書管理信息系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01
C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法示例
這篇文章主要介紹了C++實(shí)現(xiàn)從數(shù)組中同時(shí)取出最大最小元素算法,結(jié)合具體實(shí)例形式分析了C++通過數(shù)組的遍歷、排序獲取最大與最小元素的相關(guān)操作技巧,需要的朋友可以參考下2017-09-09

