C++ 有关掉期履约的问题
我有三个关于交换的问题,很可能对你来说很基本 (1) 对于两个相同类型的STL容器C++ 有关掉期履约的问题,c++,C++,我有三个关于交换的问题,很可能对你来说很基本 (1) 对于两个相同类型的STL容器a和b,下面的两个操作都有效 swap(a,b); a.swap(b); 我知道第二种算法专门用于容器(例如,仅涉及大量迭代器交换),而第一种算法是一种全局算法,用于处理泛型数据类型并执行内部复制构造 我的问题是,如果我写第一个,编译器会使用第二个吗?还是我必须仔细检查是否存在适当的专门化 (2) swap(a,b)是否会产生与swap(b,a)相同的性能?如果涉及到复制构造,并且对象的大小相差很大,我怀疑这可能
a
和b
,下面的两个操作都有效
swap(a,b);
a.swap(b);
我知道第二种算法专门用于容器(例如,仅涉及大量迭代器交换),而第一种算法是一种全局算法,用于处理泛型数据类型并执行内部复制构造
我的问题是,如果我写第一个,编译器会使用第二个吗?还是我必须仔细检查是否存在适当的专门化
(2) swap(a,b)
是否会产生与swap(b,a)
相同的性能?如果涉及到复制构造,并且对象的大小相差很大,我怀疑这可能很重要
(3) 在重载运算符=
存在且速度相对较快的情况下,在交换之前检查a==b
是有意义的,以避免不必要的操作。std::swap
是先应用此检查,还是执行此操作
谢谢你的时间
交换
模板专门用于支持交换
的每个标准库类型;专门化调用成员swap
交换(a,b)
和交换(b,a)
之间应该没有区别。(我可以想象反常的类型在哪里会起作用,但这在实践中永远不会发生)std::swap
通常不检查是否相等。在许多情况下,这比仅仅进行交换要慢这不都取决于STL的具体实现吗?我不认为你可以从标准中得到这些。第3个可能是依赖于实现的。1是明确要求的。非常感谢您的及时回复。