有关交换性能的问题

时间:2012-09-06 14:46:48

标签: c++

我有三个关于交换的问题,很可能对你很基本。

(1)关于两个相同类型的STL容器ab,下面的两个操作都可以使用

swap(a,b);
a.swap(b);

我理解第二个是专门用于容器的(例如,只涉及许多迭代器交换),而第一个是一个全局算法,用于处理通用数据类型并执行内部复制构造。

我的问题是如果我写第一个,编译器是否会使用第二个,或者我是否必须小心检查是否存在适当的特化?

(2)swap(a,b) swap(b,a)会产生相同的效果吗?如果涉及复制构造并且对象的大小差异很大,我怀疑它可能很重要吗?

(3)如果重载的运算符==存在且相对较快,则在交换之前检查a == b是有意义的,以避免不必要的操作。 std::swap首先应用此检查,还是执行操作?

谢谢你的时间!

1 个答案:

答案 0 :(得分:7)

  1. 全局swap模板专门用于支持swap的每种标准库类型;专业化调用成员swap

  2. swap(a, b)swap(b, a)之间应该没有区别。 (我可以想象它有意义的反常类型,但在实践中永远不会发生)。

  3. 不,std::swap通常不会检查是否相等。在许多情况下,这比只进行交换要慢。

相关问题