替换字符串中的字符会花费多少钱?

时间:2011-08-12 15:14:32

标签: c++

stl的字符串类是否可变?使用整数转换为字符替换字符串中的字符需要多少成本?

4 个答案:

答案 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'

细节是实现定义的,但第三行通常包括:

  1. 从字符串
  2. 加载指针值
  3. 为其添加索引
  4. 对该地址执行字节存储
  5. 所以它很便宜。在调试模式下可能会有边界检查等,并且可能还有其他代码,但上面基本上是它必须要做的。

答案 3 :(得分:0)

线性查找字符(但如果您已知道索引,则为常量)。实际替换是恒定时间,假设您的问题是字面含义。如果您实际上是指整数的字符串表示,则替换将在替换点之后的字符数中呈线性。

相关问题