std::basic_string
的迭代器失效問題通常發(fā)生在以下情況:
append()
、insert()
、erase()
等操作使字符串容量增加。replace()
、swap()
等操作。為了解決這個問題,你可以采取以下方法:
std::string str = "hello";
for (size_t i = 0; i < str.size(); ++i) {
char c = str[i];
// 處理字符 c
}
std::string str = "hello";
auto it = str.begin() + 2; // 指向 'l'
size_t index = std::distance(str.begin(), it);
// 修改字符串
str.append(" world");
// 使用索引重新獲取迭代器
it = str.begin() + index;
reserve()
函數(shù)預先分配足夠的內(nèi)存,以避免迭代器失效。std::string str = "hello";
str.reserve(100); // 預先分配足夠的內(nèi)存
auto it = str.begin() + 2; // 指向 'l'
// 修改字符串,但不會導致迭代器失效
str.append(" world");
總之,要解決 std::basic_string
的迭代器失效問題,關(guān)鍵是確保在修改字符串時不要依賴于迭代器。使用索引訪問、預先分配內(nèi)存或在修改之前將迭代器轉(zhuǎn)換為索引等方法可以幫助解決這個問題。