stl的字符串类是否可变?使用整数转换为字符替换字符串中的字符需要多少成本?
答案 0 :(得分:3)
1)是的,它是可变的。 operator []和at()都返回对字符的非const引用,如果你想要边界检查,可以在左侧使用name[7] = 'X'
或name.at(7) = 'X'
。
2)更改单个字符的成本非常低:非常接近或与C字符串相同(加上使用at()
进行边界检查的成本。)虽然标准不要求, std :: string的所有实现都将字符串存储在一个连续的内存块中(如果我记得Meyers正确的话),那么就地更改一个字符将是恒定的时间。
另请参阅boost string algorithms,它通常提供常用字符串操作的复制和就地版本。
答案 1 :(得分:1)
是的,您可以修改std::string
。
例如,使用std::string::operator[]
:
std::string str("foo");
str[0] = 'b';
std::cout << str << std::endl;
将输出"boo"
。
替换单个字符的成本是将字符复制到平台上的内存位置成本。可能不多。
答案 2 :(得分:1)
是的,它是可变的。
如果你的意思是:
std::string s("space\n");
int i = 'i';
s[2] = (char)i;
std::cout << s; // prints 'spice'
细节是实现定义的,但第三行通常包括:
所以它很便宜。在调试模式下可能会有边界检查等,并且可能还有其他代码,但上面基本上是它必须要做的。
答案 3 :(得分:0)
是
线性查找字符(但如果您已知道索引,则为常量)。实际替换是恒定时间,假设您的问题是字面含义。如果您实际上是指整数的字符串表示,则替换将在替换点之后的字符数中呈线性。