簡體   English   中英

將字符移動到字符串中會使迭代器無效嗎?

[英]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[]與在問題的權利要求)。 如同在同一代碼中一樣,使用引用修改字符串中字符的值是明確定義的,並且結果是可預測的。

您不能做的是添加或刪除元素,因此,在諸如replaceoperator+=類的函數之后,您一定不能重復使用迭代器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM