如果我想将 char c 添加到字符串 s 的开头,以下是好的做法吗?
string s = "oo";
char c = 'f';
s = c + s;
在 SO 上的问题“ Prepend std::string ”中,建议这样做的答案不如最佳答案受欢迎,后者建议使用成员函数 .insert()
.
除了效率之外还有其他原因吗(s = c + s
效率不高,因为必须复制string s
的所有内容)?
最佳答案
既然两者执行相同的操作,那么除了效率还有什么原因呢? c+s
将创建一个临时字符串,因此需要 c
和 s
中每个字符的拷贝,并且可能需要堆分配。然后临时对象将被移动到给定的对象中,该对象将释放其当前内存(如果有)。这些操作并不便宜。
相比之下,insert
将仅在新字符的容量不足时执行堆分配。你仍然会继续复制,因为你是在开始时插入的。但仅此而已。它与在连续数组的头部插入一样高效。
关于c++14 - 这是在字符串前添加字符的好方法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51199829/