C++中使用vector存儲并遍歷數(shù)據(jù)的基本步驟
在C++中,容器是用于存儲和管理一組數(shù)據(jù)對象的類模板。C++標(biāo)準(zhǔn)模板庫(STL)提供了幾種主要的容器類型,每種容器都有其特定的用途和特性。
(1)容器及簡要描述
以下是C++中一些主要的容器及其簡要描述:
順序容器
vector
:一個動態(tài)數(shù)組,可以隨機訪問元素,且在尾部添加或刪除元素效率較高。deque
(雙端隊列):一個雙端動態(tài)數(shù)組,支持在頭部和尾部添加或刪除元素。list
:一個雙向鏈表,支持在任何位置快速插入和刪除元素,但不支持隨機訪問。forward_list
:一個單向鏈表,比list
更輕量級,但只支持單向遍歷。array
:一個固定大小的數(shù)組,大小在編譯時確定,不支持動態(tài)改變大小。
關(guān)聯(lián)容器
set
:一個集合,存儲唯一且有序的元素,底層通常實現(xiàn)為紅黑樹。multiset
:與set
類似,但允許存儲重復(fù)元素。map
:一個鍵值對容器,其中每個鍵都是唯一的,且按鍵排序,底層通常也實現(xiàn)為紅黑樹。multimap
:與map
類似,但允許鍵重復(fù)。
無序關(guān)聯(lián)容器(基于哈希表):
unordered_set
:一個集合,存儲唯一元素,但不保證元素順序,底層實現(xiàn)為哈希表。unordered_multiset
:與unordered_set
類似,但允許存儲重復(fù)元素。unordered_map
:一個鍵值對容器,鍵唯一,但不保證鍵的順序,底層實現(xiàn)為哈希表。unordered_multimap
:與unordered_map
類似,但允許鍵重復(fù)。
容器適配器:
stack
:一個后進先出(LIFO)的容器適配器,通?;?code>deque或vector
實現(xiàn)。queue
:一個先進先出(FIFO)的容器適配器,通常基于deque
實現(xiàn)。priority_queue
:一個優(yōu)先隊列,元素根據(jù)優(yōu)先級排序,通?;?code>vector并使用堆排序算法實現(xiàn)。
每種容器都有其特定的接口和成員函數(shù),用于管理其存儲的數(shù)據(jù)。選擇哪種容器取決于具體的應(yīng)用場景和需求,比如數(shù)據(jù)的訪問模式、插入和刪除操作的頻率、是否需要有序存儲等。
在使用C++容器時,了解它們的性能特征和底層實現(xiàn)對于編寫高效代碼至關(guān)重要。例如,vector
在添加元素時可能需要重新分配內(nèi)存和復(fù)制數(shù)據(jù),而list
在插入和刪除元素時則不需要移動其他元素,但訪問元素的速度較慢。因此,在選擇容器時,需要根據(jù)具體的應(yīng)用場景進行權(quán)衡。
(2)使用 vector 存儲和遍歷數(shù)據(jù)的基本步驟
在C++中,vector
是一個非常靈活的容器,它能夠存儲任何類型的對象,并且能夠動態(tài)地增長和縮小。下面是如何使用 vector
存儲和遍歷數(shù)據(jù)的基本步驟:
1. 包含頭文件
首先,需要包含 <vector>
頭文件來使用 vector
。
#include <vector>
2. 創(chuàng)建 vector
可以創(chuàng)建一個 vector
來存儲特定類型的元素。例如,創(chuàng)建一個存儲整數(shù)的 vector
:
std::vector<int> numbers;
3. 向 vector 中添加元素
可以使用 push_back()
方法向 vector
中添加元素。
numbers.push_back(10); numbers.push_back(20); numbers.push_back(30);
4. 遍歷 vector
有幾種方法可以遍歷 vector
中的元素:
方法1:使用范圍for循環(huán)(C++11及以后)
for (int number : numbers) { std::cout << number << " "; } std::cout << std::endl;
方法2:使用迭代器
for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl;
方法3:使用下標(biāo)訪問(不推薦在循環(huán)中使用,除非你知道索引)
for (size_t i = 0; i < numbers.size(); ++i) { std::cout << numbers[i] << " "; } std::cout << std::endl;
方法4:使用 auto 關(guān)鍵字(C++11及以后)簡化迭代器寫法
for (auto it = numbers.begin(); it != numbers.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl;
5. 使用標(biāo)準(zhǔn)庫算法(可選)
也可以使用標(biāo)準(zhǔn)庫中的算法,如 std::for_each
,來遍歷 vector
。
#include <algorithm> // 包含算法頭文件 #include <iostream> // 包含輸入輸出流頭文件 std::for_each(numbers.begin(), numbers.end(), [](int n) { std::cout << n << " "; }); std::cout << std::endl;
這些是使用 vector
存儲和遍歷數(shù)據(jù)的基本方法。
(3)簡單實例
在C++中,std::vector
是一個動態(tài)數(shù)組,能夠根據(jù)需要自動調(diào)整其大小,非常適合用于存儲和管理數(shù)據(jù)。以下是一個簡單的示例,展示了如何使用 std::vector
存儲和遍歷數(shù)據(jù)。
示例代碼
#include <iostream> #include <vector> int main() { // 創(chuàng)建一個整數(shù)類型的vector std::vector<int> numbers; // 向vector中添加數(shù)據(jù) numbers.push_back(10); numbers.push_back(20); numbers.push_back(30); numbers.push_back(40); numbers.push_back(50); // 使用范圍for循環(huán)遍歷vector并輸出數(shù)據(jù) std::cout << "Using range-based for loop:" << std::endl; for (int number : numbers) { std::cout << number << " "; } std::cout << std::endl; // 使用傳統(tǒng)的索引for循環(huán)遍歷vector并輸出數(shù)據(jù) std::cout << "Using traditional for loop:" << std::endl; for (size_t i = 0; i < numbers.size(); ++i) { std::cout << numbers[i] << " "; } std::cout << std::endl; // 使用迭代器遍歷vector并輸出數(shù)據(jù) std::cout << "Using iterator:" << std::endl; for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it) { std::cout << *it << " "; } std::cout << std::endl; return 0; }
解釋
包含頭文件:
#include <iostream>
用于輸入輸出流。#include <vector>
用于使用std::vector
容器。
創(chuàng)建vector:
std::vector<int> numbers;
創(chuàng)建一個整數(shù)類型的vector
。
添加數(shù)據(jù):
numbers.push_back(10);
向vector
末尾添加數(shù)據(jù)。
范圍for循環(huán)遍歷:
for (int number : numbers)
使用范圍for循環(huán),簡潔地遍歷vector
中的每一個元素。
傳統(tǒng)索引for循環(huán)遍歷:
for (size_t i = 0; i < numbers.size(); ++i)
使用傳統(tǒng)的索引for循環(huán),通過下標(biāo)訪問vector
中的元素。
迭代器遍歷:
for (std::vector<int>::iterator it = numbers.begin(); it != numbers.end(); ++it)
使用迭代器遍歷vector
,這種方式在需要對vector
進行修改時非常有用。
注意事項
std::vector
會自動管理內(nèi)存,當(dāng)添加新元素時,它會自動調(diào)整大小。- 使用
push_back
方法可以在vector
末尾添加元素。 - 訪問
vector
元素時要注意不要越界,可以使用size()
方法獲取vector
的大小。 - 使用迭代器時,可以通過
begin()
和end()
方法獲取迭代器的起始和結(jié)束位置。
通過以上方法,可以方便地使用 std::vector
存儲和遍歷數(shù)據(jù)。
總結(jié)
到此這篇關(guān)于C++中使用vector存儲并遍歷數(shù)據(jù)的文章就介紹到這了,更多相關(guān)C++ vector存儲并遍歷數(shù)據(jù)內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
openCV4.1.1+VS2019環(huán)境配置詳解
這篇文章主要介紹了openCV4.1.1+VS2019環(huán)境配置詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-08-08C++?數(shù)據(jù)結(jié)構(gòu)超詳細講解順序表
程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示2022-03-03C語言實現(xiàn)班級檔案管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細介紹了C語言實現(xiàn)班級檔案管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12