1,default swap

  1. namespace std
  2. {
  3. template<typename T>
  4. void swap( T& a, T& b)
  5. {
  6. T temp(a);
  7. a = b;
  8. b=temp;
  9. }
  10. }

只要类型T支持copying,默认的swap实现代码就会帮你置换类型为T的对象,你不需要为此另外再做任何工作。

2,std::swap

  1. class Widget //于前面一样,唯一的差别是增加了Swap函数
  2. {
  3. public:
  4. ...
  5. void swap(Widget& other)
  6. {
  7. using std::swap; //很有必要
  8. swap(pImpl, other.pImpl); //若要置换Widgets就要置换其批Impl指针。
  9. }
  10. ...
  11. };
  12.  
  13. namespace std
  14. {
  15. template<> //修订后的std::swap特化版本
  16. void swap<Widget>(Widget& a,Widget& b)
  17. {
  18. a.swap(b);
  19. }
  20. }

与STL容器还有一致性,多有的STL容器都提供有public swap成员函数和std::swap特化版本(用以调用前者)。

3,non-member swap

  1. namespace WidgetStuff
  2. {
  3. ...
  4. template<typename T.
  5. class Widget {...};
  6. ...
  7.  
  8. template<typename T> //non_mamber swap函数
  9. void swap(Widget<T>& a, Widget<T>& b)      //这里并不属于std命名空间
  10. {
  11. a.swap(b);
  12. }
  13. }

对class和class template都可以用。

函数 swap的更多相关文章

  1. 交换函数swap的三种实现方法

    http://blog.csdn.net/GarfieldEr007/article/details/48314295 本文采用三种方式实现两个数之间的交换,分别是①借助辅助变量temp的swap函数 ...

  2. 函数————swap

    swap(vec[i],vec[j]); 交换两个元素.

  3. vector 利用swap 函数进行内存的释放 vector<int>().swap

    首先,vector与deque不同,其内存占用空间只会增长,不会减小.比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个.所有 ...

  4. C++学习笔记(二)——交换函数(swap)

    这次我们要透过一个简单的函数swap深入理解函数传参的本质以及在C++中如何选择传参方式. 先来看第一段程序: void swap(int x, int y) { int temp = y; y = ...

  5. 《Effective C++》item25:考虑写出一个不抛异常的swap函数

    std::swap()是个很有用的函数,它可以用来交换两个变量的值,包括用户自定义的类型,只要类型支持copying操作,尤其是在STL中使用的很多,例如: int main(int argc, _T ...

  6. std::vector利用swap()函数进行内存的释放【转】

    首先,vector与deque不同,其内存占用空间只会增长,不会减小.比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个.所有 ...

  7. C/C++ 错误笔记-解决swap函数与标准库的std::swap函数冲突的问题

    下午写了一份代码: #include <iostream> using namespace std; // 模板1:交换基本类型的值 template<typename T> ...

  8. vector利用swap()函数进行内存的释放

    首先,vector与deque不同,其内存占用空间只会增长,不会减小.比如你首先分配了10,000个字节,然后erase掉后面9,999个,则虽然有效元素只有一个,但是内存占用仍为10,000个.所有 ...

  9. Delphi_07_Delphi_Object_Pascal_基本语法_05_函数参数

    这里主要讨论Delphi中函数.方法的相关内容. 一.工程文件 { Delphi语法方法和函数 1.方法 2.函数 } program Routine; {$APPTYPE CONSOLE} uses ...

随机推荐

  1. iOS6 / iOS7 状态栏高度适配

    问题原因:iOS7的状态栏(status bar)不再占用单独的20px,所以假设你在iOS6上的界面布局是正常的,那么到了iOS7上就会变成以下这个样子:             左边是iOS6界面 ...

  2. 更新mac自带的python

    mac lion自带的python是2.7版本的,有点儿低,要使用一些应用的时候还需要3.3以上的,这时可以用以下的方法更新mac自带的python. 先去python的官网下载最新的python,并 ...

  3. 【ZZ】超全面的设计模式总结

    http://www.cnblogs.com/chenssy/p/3357683.html#rd

  4. Eclipse常用快捷键集合

    一.通用快捷键 [ALT+/]   此快捷键为用户编辑的神级好帮手,能为用户提供内容的辅助,不要为记不全方法和属性名称犯愁下 [Ctrl+T] 搜索当前接口的实现类 [Ctrl+O]  显示类中方法和 ...

  5. 小白日记19:kali渗透测试之选择和修改EXP

    EXP 目的:学会选择和修改网上公开的漏洞利用代码[EXP(python\perl\ruby\c\c++....)] 方法: 1.Exploit-db[kali官方维护的漏洞利用代码库] 2.Secu ...

  6. SSH Spring3\Java1.8 “Unable to instantiate Action, xxAction, defined for 'xxAction_login' in namespace '/'null”

    1.Stacktraces Unable to instantiate Action,xxAction, defined for 'xxAction_login' in namespace '/'nu ...

  7. C - Minimum Inversion Number

    Description The inversion number of a given number sequence a1, a2, ..., an is the number of pairs ( ...

  8. Sqlite和CoreData的区别

    使用方便性.实际上,一个成熟的工程中一定是对数据持久化进行了封装的,因此底层使用的到底是core data还是sqlite,不应该被业务逻辑开发者关心.因此,即使习惯写SQL查询的人,也应该避免在业务 ...

  9. android开发之路07(无硝烟的战争)

    如何做一名优秀的android面试官? 如何做一名优秀的android候选者? 提到这个问题我不得不提起我们小升初,初升高,高生升本这几个历程中我们与出题人之间的无硝烟的战争.我们总是为自己的成绩担心 ...

  10. 配置hibernate例子

    一.hiberbate.cfg.xml <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE hib ...