Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 有关掉期履约的问题_C++ - Fatal编程技术网

C++ 有关掉期履约的问题

C++ 有关掉期履约的问题,c++,C++,我有三个关于交换的问题,很可能对你来说很基本 (1) 对于两个相同类型的STL容器a和b,下面的两个操作都有效 swap(a,b); a.swap(b); 我知道第二种算法专门用于容器(例如,仅涉及大量迭代器交换),而第一种算法是一种全局算法,用于处理泛型数据类型并执行内部复制构造 我的问题是,如果我写第一个,编译器会使用第二个吗?还是我必须仔细检查是否存在适当的专门化 (2) swap(a,b)是否会产生与swap(b,a)相同的性能?如果涉及到复制构造,并且对象的大小相差很大,我怀疑这可能

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

(1) 对于两个相同类型的STL容器
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是明确要求的。非常感谢您的及时回复。