c++14 - 这是在字符串前添加字符的好方法吗?

标签 c++ string performance c++14

如果我想将 char c 添加到字符串 s 的开头,以下是好的做法吗?

string s = "oo";
char c = 'f';
s = c + s;

在 SO 上的问题“ Prepend std::string ”中,建议这样做的答案不如最佳答案受欢迎,后者建议使用成员函数 .insert().

除了效率之外还有其他原因吗(s = c + s效率不高,因为必须复制string s的所有内容)?

最佳答案

既然两者执行相同的操作,那么除了效率还有什么原因呢? c+s 将创建一个临时字符串,因此需要 cs 中每个字符的拷贝,并且可能需要堆分配。然后临时对象将被移动到给定的对象中,该对象将释放其当前内存(如果有)。这些操作并不便宜。

相比之下,insert在新字符的容量不足时执行堆分配。你仍然会继续复制,因为你是在开始时插入的。但仅此而已。它与在连续数组的头部插入一样高效。

关于c++14 - 这是在字符串前添加字符的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51199829/

相关文章:

c++ - 当对象包含另一个对象的 Vector 时无法设置值

c++ - 写一个函数 sumVector : not returning a value

python - 让 Valgrind 检测 Python 脚本 : 调用的 C++ 程序的内存泄漏

c - 由于换行而打印字符串

c++ - 我怎样才能改进/替换我认为是性能热点的 sprintf?

c++ - STL map 如何知道该 map 包含给定元素?

python - 为什么 Simple String 的 Character 有这么多数组维度?

Python 错误 - 或者我的愚蠢 - 在扫描字符串文字时 EOL

C++获取字符串数组的大小

mysql - 如何调整 UNION ALL 查询?