c++ - 将字符 move 到字符串中会使迭代器无效吗?

标签 c++ string iterator move

因此遍历字符串并使用 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。

最佳答案

您正在修改字符串的现有字符,因此它是完全安全的。当字符串存储的大小可能发生变化时,迭代器将失效,例如当您追加一个新字符时,可能需要分配一个更大的字符串缓冲区,因此所有指向先前缓冲区的迭代器都可能变得无效。

关于c++ - 将字符 move 到字符串中会使迭代器无效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44883312/

相关文章:

Java JDBC 不是重用 String 值吗?

C 中的金字塔连接

c++ - 用 concurrent_vector 迭代器算术 : is it safe to assume that subtracting 'begin ()' from an iterator will give the index?

python - 如何在 pytables 中创建可以存储 Unicode 字符串的压缩数据集?

c++ - 如何根据 libxml++ 中的 relaxNG 模式验证 xml 文档

c++ - 如何计算文件中的零和一?

c++ - 预处理器输出文件是否为有效的 C/C++ 文件

c++ - 将指针传递给 vector 的第一个元素(如果有)

c++ - 结合模板和继承

c++ - ^= 32 背后的想法是什么,它将小写字母转换为大写字母,反之亦然?