关于swap函数

转载 2012年03月26日 15:16:47
问题产生

#include <iostream>
using namespace std;
int main()
{
 
 void swap(int &,int &);
 int i=3,j=5;
 swap(i,j);
 cout<<"i="<<i<<" "<<"j="<<j<<endl;
 return 0;
}

void swap(int &a,int &b)
{int temp;
 temp=a;
 a=b;
 b=temp;
}

vc6.0下,输出的是:

i=3,j=5

交换不了。

编辑本段解决方案

1.改函数名:

#include <iostream>
using namespace std;
int main()
{
 
 void swapa(int &,int &);
 int i=3,j=5;
 swapa(i,j);
 cout<<"i="<<i<<" "<<"j="<<j<<endl;
 return 0;
}

void swapa(int &a,int &b)
{int temp;
 temp=a;
 a=b;
 b=temp;
}

2.不用标准库,

#include <iostream.h>
int main()
{
 
 void swap(int &,int &);
 int i=3,j=5;
 swap(i,j);
 cout<<"i="<<i<<" "<<"j="<<j<<endl;
 return 0;
}

void swap(int &a,int &b)
{int temp;
 temp=a;
 a=b;
 b=temp;
}
3.不用命名空间

#include <iostream>
int main()
{
 
 void swap(int &,int &);
 int i=3,j=5;
 swap(i,j);
 std::cout<<"i="<<i<<" "<<"j="<<j<<std::endl;
 return 0;
}

void swap(int &a,int &b)
{int temp;
 temp=a;
 a=b;
 b=temp;
}

4.直接调用:

#include <iostream>
using namespace std;
int main()
{
 
 int i=3,j=5;
 swap(i,j);
 cout<<"i="<<i<<" "<<"j="<<j<<endl;
 return 0;
}

5.去掉函数声明。

#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
 int temp=a;
 a=b;
 b=temp;
}


int main()
{
 int a=11,b=5;
 swap(a,b);
 cout<<a<<" "<<b<<endl;
 return 0;
}

编辑本段问题原因

出现上面问题,关键是跟c++标准库函数里面的swap函数冲突了。

就是存在std::swap

标准库的swap函数,跟上面自定义的swap函数(形参返回值)一模一样的。因此编译器就出现问题了。

单步调试的结果是,翻译器跳过上面的 swap(i,j)语句。

通过单步调试第四个程序,找到std::swap的原型:

template<class _Ty> inline
 void swap(_Ty& _X, _Ty& _Y)
 {_Ty _Tmp = _X;
 _X = _Y, _Y = _Tmp; }

编辑本段启示

不要直接用using namespace std;

这种方法,要用到的时候,才用std:: 这样。

例如,std::endl;等等。

避免出现上面问题。

java中swap函数的实现分析

实践是检验真理的唯一标准,java代码: public class TestReference { public static void main(String[] args) { ...
  • xuxurui007
  • xuxurui007
  • 2012年06月10日 16:26
  • 17116

变量值互换自定义函数swap()的使用

(Ps:初学者可以学习学习,大神也请不吝赐教) 最近在学习排序的过程中,发现很多排序的程序中都会用到数组元素值互换的一小段代码。然后想着直接把元素值的互换写成函数以后直接调用即可,当时命名为...
  • Apollon_krj
  • Apollon_krj
  • 2016年05月18日 17:41
  • 1581

Swap函数实现

Swap函数 基本实现1)一般实现,借助临时变量// 引用实现 Swap1(int &x, int &y) { int temp; temp = x; x = y; y...
  • yzhang6_10
  • yzhang6_10
  • 2016年04月04日 15:21
  • 2704

SWAP函数的几种写法

你会写几种swap函数?        swap函数估计是一个各种各样程序都会频繁用到的子程序,可是你知道它究竟有多少种不同的写法吗?下面我就列举我知道的几种swap函数来跟大家分享一下。 (1...
  • u013593035
  • u013593035
  • 2014年09月28日 20:29
  • 1469

C语言swap函数

http://blog.sina.com.cn/u/2943212997 c语言中的swap函数:     void swap(int *a, int *b) {         ...
  • u012349696
  • u012349696
  • 2014年02月19日 17:50
  • 6292

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

本文采用三种方式实现两个数之间的交换,分别是①借助辅助变量temp的swap函数,②采用加减法的swap函数 ,③使用异或运算的swap函数。 现在直奔主题: 1、借助辅助变量temp的swap函数 ...
  • GarfieldEr007
  • GarfieldEr007
  • 2015年09月09日 12:55
  • 8599

关于四个swap函数的归类

    在学习C语言函数那一章节的时候我们第一次认识了swap。当时书上举这个例子是为了说明函数的“单向值传递”原理,即在函数调用的时候,实参总是将自己的值单向传递给形参,而不能反过来,并且在这个过程...
  • collier
  • collier
  • 2010年09月04日 09:57
  • 2746

swap()函数需要头文件爱你

使用std::swap(); #include //using namespace std; int main(int argc, char *argv[]) { int a = 5; in...
  • ldanduo
  • ldanduo
  • 2012年10月08日 23:41
  • 6939

温故而知新:C语言中swap函数

在看排序算法,发现使用到swap()函数,于是重新看了一次啊
  • litao31415
  • litao31415
  • 2014年10月17日 13:46
  • 7596

STL algorithm中的swap 函数使用

对自定义类型使用STL algorithm中的swap函数, 会调用自定义的类型的拷贝构造函数一次,赋值函数两次;自定义类型中没有定义那么就会使用默认的拷贝构造函数和赋值函数。  如果是容器,那么会...
  • Blues1021
  • Blues1021
  • 2015年08月15日 17:58
  • 2479
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于swap函数
举报原因:
原因补充:

(最多只允许输入30个字)