[英]Does moving characters into string invalidate iterators?
因此,遍歷字符串並使用operator[]
或insert更改字符可能會使迭代器無效。
這樣的迭代也是如此嗎?
std::string str = "ABCD";
for(auto&& c : str){
for(int i = 0; i < 3; ++i){
switch(c) {
case 'A':
c = 'B';
break;
case 'B':
c = 'C';
break;
/*...*/
}
//do something
}
}
這段代碼適用於gcc和msvc,但是我不知道我是否可以信任它。 我正在使用C ++ 14。
您正在修改字符串的現有字符,因此它是完全安全的。 當字符串存儲的大小可能更改時,迭代器將無效,例如,當您添加新字符時,可能需要分配更大的字符串緩沖區,因此所有指向先前緩沖區的迭代器都可能無效。
您可以修改集合的任何元素而不會使其迭代器無效。 字符串是字符的集合,所以這保證適用,包括通過分配operator[]
與在問題的權利要求)。 如同在同一代碼中一樣,使用引用修改字符串中字符的值是明確定義的,並且結果是可預測的。
您不能做的是添加或刪除元素,因此,在諸如replace
或operator+=
類的函數之后,您一定不能重復使用迭代器。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.