我如何使交换功能更快在c++
How can I make swap function faster in c++ ?
我正在用c++编写一对字符串排序算法,我想知道我是否可以使这个交换操作更快。
void swap(string *items,int a, int b ){
string temp;
temp = items[a];
items[a] = items[b];
items[b] = temp;
}
如果你能帮忙,我会很感激的。 String类有自己的swap函数
items[a].swap(items[b]);
这是最快的方法,因为它访问字符串内部并避免所有复制。
。
您可以使用std::swap()
:
void swap(string *items, int a, int b) {
std::swap(items[a], items[b]);
}
但是不能保证这一定会更快,而且这可能不是代码中慢的部分。与其他代码相比,您是否测量过交换操作的性能?
使用std::swap
;它将尽其所能。如果您的编译器支持c++ 11的右值引用,这意味着它将利用move语义来避免在swap函数中发生的复制。
但是,如果编译器不支持右值引用,它的执行方式很可能与swap函数相同。
大多数标准库实现将std::swap
实现为类似于:
template<typename T>
void swap(T& a, T& b) {
T temp(std::move(a));
a = std::move(b);
b = std::move(temp);
}
std::move
函数将向传入的变量返回一个右值引用(T&&)。当您尝试赋值这个右值引用时,它将调用该类型的move操作符(如果有的话)。如果移动操作符不可用,它将像往常一样调用复制操作符。
在std::string
的情况下,上述交换函数将不会在c++ 11中进行字符串复制;只有内部数据,如字符串长度和C字符串指针,将被复制。如果没有c++ 11,它将执行实际字符串内容的三份拷贝。
您可以更改算法以处理string*
而不是string
类型的元素。然后,swap
函数中的所有赋值都将在指针上操作,并且更快,因为不涉及字符串复制。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 多态性和功能结合
- 带内存和隔离功能的SQLite
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- 类模板的成员功能的定义在单独的TU中完全专业化
- 有没有一种方法可以创建一个带有哈希表的数据库,该哈希表具有恒定时间查找功能
- 如何在C++中获得"静态纯虚拟"功能?
- 两个文件使用彼此的功能-如何解决
- 我应该实现右值推送功能吗?我应该使用std::move吗
- QML按钮点击功能执行顺序
- 无法理解此 return 语句的功能,没有它就会发生运行时错误
- 有没有可能有一个只有ADL才能找到的非好友功能
- 功能样式转换从 'int' 到 'ItemType' 的匹配转换
- 文件系统:复制功能的速度秘诀是什么
- 在用于格式4的arm模拟器中实现功能时的一个问题
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 对可变参数使用声明.如何选择正确的功能
- 询问在设计我的手臂模拟器功能表示格式1
- 功能原型的目的
- 这里在 Linux 中具有"CreatePipe"和"CreateProcessW"功能吗?