C++中使用vector存儲并遍歷數(shù)據(jù)的基本步驟
在C++中,容器是用于存儲和管理一組數(shù)據(jù)對象的類模板。C++標準模板庫(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)的容器適配器,通?;?code>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:使用下標訪問(不推薦在循環(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. 使用標準庫算法(可選)
也可以使用標準庫中的算法,如 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),通過下標訪問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-08
C++?數(shù)據(jù)結(jié)構(gòu)超詳細講解順序表
程序中經(jīng)常需要將一組數(shù)據(jù)元素作為整體管理和使用,需要創(chuàng)建這種元素組,用變量記錄它們,傳進傳出函數(shù)等。一組數(shù)據(jù)中包含的元素個數(shù)可能發(fā)生變化,順序表則是將元素順序地存放在一塊連續(xù)的存儲區(qū)里,元素間的順序關(guān)系由它們的存儲順序自然表示2022-03-03
C語言實現(xiàn)班級檔案管理系統(tǒng)課程設(shè)計
這篇文章主要為大家詳細介紹了C語言實現(xiàn)班級檔案管理系統(tǒng)課程設(shè)計,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-12-12

