原地字符串反转
1 |
|
从后往前重新构造字符串
1 |
|
总结
最容易想到的就是从后往前重新构造字符串,重新构建字符串的过程会涉及多次扩容操作
无论std::string
变量存储在栈上或堆上,它的底层字符数据存储在堆上。
下面是 std::string
类型的 operator+
操作符的源码:
1 | // Modifiers: |
string::append源码
1 | /** |
由此可见,重新构建字符串的过程会涉及多次扩容操作
故使用原地反转算法效率会高
这里想到了使用reverse预先分配容量,避免多次扩容,与vector::reverse同理
使用reverse后与原地反转相比哪个效率高呢???
哈哈哈这里我感觉效率差不多
std::string reverse用法
使用 reserve()
函数预先分配容量,避免多次扩容
1 | // string::reserve |
std::swap和std::iter_swap
C++中,std::swap
和std::iter_swap
是两个用于交换值的函数,但它们的使用场景和功能略有不同。
### std::swap:
- 功能:std::swap
用于交换两个值。
- 用法:std::swap
接受两个参数,通过引用将它们交换。
- 示例:
1 | int a = 5; |
### std::iter_swap:
- 功能:std::iter_swap
用于交换迭代器指向的两个元素的值。
- 用法:std::iter_swap
接受两个迭代器作为参数,交换它们指向的值。
- 示例:
1 | std::vector<int> vec = {1, 2, 3, 4}; |
在使用上,std::swap
更适用于普通值的交换,而std::iter_swap
更适用于需要交换容器中元素的迭代器。
作者:张泽中