C++ 中 vector 的常用操作方法匯總
在 C++ 中,vector
是 STL(標準模板庫)提供的一個動態(tài)數(shù)組容器,允許我們在運行時動態(tài)調(diào)整大小。vector 提供了許多方便的操作,使得它成為管理數(shù)據(jù)的理想選擇。在這篇博客中,我們將探討 vector 的一些常用操作方法,并提供一些拓展知識,幫助你更好地理解和使用這一強大的數(shù)據(jù)結(jié)構(gòu)。
1. 初始化和賦值
1.1 默認構(gòu)造函數(shù)
vector<int> v1;
創(chuàng)建一個空的 vector
。
1.2 指定大小和初值
vector<int> v2(5, 10);
創(chuàng)建一個包含 5 個元素的 vector
,每個元素的初始值為 10。
1.3 使用列表初始化
vector<int> v3 = {1, 2, 3, 4, 5};
使用初始值列表來構(gòu)造 vector
。
1.4 拷貝構(gòu)造函數(shù)
vector<int> v4(v3);
使用現(xiàn)有的 vector
進行拷貝構(gòu)造。
2. 訪問元素
2.1 使用 [] 操作符
int val = v3[2];
直接通過索引訪問元素,但不檢查邊界。
2.2 使用 at() 函數(shù)
int val = v3.at(2);
與 []
類似,但 at()
會檢查索引是否合法,超出范圍會拋出異常。
2.3 獲取第一個和最后一個元素
int first = v3.front(); int last = v3.back();
2.4 獲取指向數(shù)據(jù)的指針
int* data_ptr = v3.data();
獲取 vector
中元素存儲數(shù)組的指針。
3. 修改元素
3.1 添加元素
3.1.1 使用 push_back()
v3.push_back(6);
在 vector
的末尾添加一個元素。
3.1.2 使用 emplace_back()
v3.emplace_back(7);
在末尾原地構(gòu)造一個元素,避免不必要的拷貝。
3.2 刪除元素
3.2.1 使用 pop_back()
v3.pop_back();
移除 vector
末尾的元素。
3.2.2 使用 erase()
v3.erase(v3.begin() + 2);
移除指定位置的元素。
3.2.3 使用 clear()
v3.clear();
清空 vector
中的所有元素。
4. 迭代器操作
4.1 使用迭代器遍歷
for (vector<int>::iterator it = v3.begin(); it != v3.end(); ++it) { cout << *it << " "; }
4.2 使用范圍 for循環(huán)
for (int val : v3) { cout << val << " "; }
4.3 使用反向迭代器
for (vector<int>::reverse_iterator rit = v3.rbegin(); rit != v3.rend(); ++rit) { cout << *rit << " "; }
5. 容量管理
5.1 使用 size() 和 capacity()
size_t size = v3.size(); size_t capacity = v3.capacity();
size()
返回 vector
中的元素個數(shù),capacity()
返回當前分配的存儲空間大?。梢匀菁{的元素個數(shù))。
5.2 使用 reserve()
v3.reserve(10);
預(yù)先分配至少能容納 10 個元素的空間。
5.3 使用 resize()
v3.resize(8, 0);
將 vector
的大小調(diào)整為 8,如果新大小大于當前大小,多出的元素將使用 0 進行初始化。
6. 性能優(yōu)化技巧
6.1 避免不必要的拷貝
在插入元素時,盡量使用 emplace_back()
而不是 push_back()
,可以減少一次對象的拷貝構(gòu)造。
6.2 使用 shrink_to_fit()
v3.shrink_to_fit();
將多余的容量釋放,減少內(nèi)存占用。
6.3 避免過度擴展
在已知 vector
大小大致范圍時,提前使用 reserve()
分配足夠的空間,避免擴展時頻繁的內(nèi)存分配。
7. 拓展知識
7.1 vector 的內(nèi)存管理
vector
使用的是動態(tài)數(shù)組來管理元素。當需要擴展時,它會分配一個更大的內(nèi)存塊,將原有元素拷貝過去。為了避免頻繁的內(nèi)存分配,vector
通常會預(yù)留比實際需要更多的空間,這就是 capacity()
和 size()
之間的差異。
7.2 異常安全性
vector
的許多操作,如 push_back()
、resize()
等,可能會分配新的內(nèi)存并移動對象。因此,在操作 vector
時要考慮異常安全性。大多數(shù)情況下,vector
提供的是“強異常安全保證”,即如果發(fā)生異常,容器的狀態(tài)不會被破壞。
7.3 與原始數(shù)組的比較
vector
提供了動態(tài)調(diào)整大小、自動管理內(nèi)存和許多便利的操作,而原始數(shù)組則更為簡單且性能稍高。在需要高效內(nèi)存使用的地方,可以考慮使用 std::array
或原始數(shù)組,但在大多數(shù)情況下,vector
是更安全和靈活的選擇。
到此這篇關(guān)于C++ 中 vector 的常用操作方法的文章就介紹到這了,更多相關(guān)C++ vector 操作內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++實現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果的示例代碼
這篇文章主要為大家詳細介紹了C++如何實現(xiàn)將圖片轉(zhuǎn)換為馬賽克效果,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解一下2023-01-01opencv4.5.4+VS2022開發(fā)環(huán)境搭建的實現(xiàn)
本文主要介紹了opencv4.5.4+VS2022開發(fā)環(huán)境搭建的實現(xiàn),文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02