在 C++ 中,vector
是一種動(dòng)態(tài)數(shù)組,能夠自動(dòng)調(diào)整大小以容納更多的元素。然而,在使用 vector
時(shí),也可能會(huì)遇到一些異常情況,如內(nèi)存分配失敗、索引越界等。為了處理這些異常情況,C++ 標(biāo)準(zhǔn)庫(kù)提供了一些異常類,并在 vector
的成員函數(shù)中拋出這些異常。
以下是 C++ vector
的主要異常處理機(jī)制:
vector
需要分配新的內(nèi)存來(lái)容納更多元素時(shí),如果內(nèi)存分配失敗,它將拋出一個(gè) std::bad_alloc
異常。你可以使用 try-catch
塊來(lái)捕獲這個(gè)異常并進(jìn)行相應(yīng)的處理。#include <iostream>
#include <vector>
#include <stdexcept>
int main() {
try {
std::vector<int> v;
for (int i = 0; i < 1000000000; ++i) {
v.push_back(i); // 這將導(dǎo)致內(nèi)存分配失敗
}
} catch (const std::bad_alloc& e) {
std::cerr << "Memory allocation failed: " << e.what() << '\n';
}
return 0;
}
注意:在實(shí)際編程中,你應(yīng)該避免嘗試分配如此大量的內(nèi)存,這只是為了演示異常處理機(jī)制。
2. 索引越界:當(dāng)你嘗試訪問(wèn) vector
中不存在的元素時(shí),它將拋出一個(gè) std::out_of_range
異常。你可以使用 try-catch
塊來(lái)捕獲這個(gè)異常并進(jìn)行相應(yīng)的處理。
#include <iostream>
#include <vector>
#include <stdexcept>
int main() {
std::vector<int> v = {1, 2, 3};
try {
std::cout << v[3] << '\n'; // 這將導(dǎo)致索引越界
} catch (const std::out_of_range& e) {
std::cerr << "Index out of range: " << e.what() << '\n';
}
return 0;
}
vector
的其他成員函數(shù)還可能拋出其他類型的異常。你可以查閱 C++ 標(biāo)準(zhǔn)庫(kù)的文檔以了解有關(guān) vector
異常處理的更多信息。需要注意的是,C++ 異常處理機(jī)制并不是萬(wàn)能的,它并不能捕獲所有可能的錯(cuò)誤。例如,如果你嘗試訪問(wèn)一個(gè)未初始化的 vector
的元素,它將不會(huì)拋出異常,而是可能導(dǎo)致未定義的行為。因此,在使用 vector
時(shí),你應(yīng)該始終檢查你的代碼以確保不會(huì)發(fā)生這些錯(cuò)誤。