关于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;等等。

避免出现上面问题。

swap交换函数

  • 2015年07月07日 21:05
  • 466B
  • 下载

java中swap函数的实现分析

实践是检验真理的唯一标准,java代码: public class TestReference { public static void main(String[] args) { ...

在C/C++中,自定义的swap函数详解

自定义的swap函数是一个老掉牙的问题,而这个问题对于理解指针和内存中的栈是很有帮助的 一般自定swap函数是这样的: 1.swap函数的功能是实现两个的相互替换 2.在main函数中调用swa...

c/c++和java实现swap函数的不同处

首先我们来看一下在c/c++中实现的swap函数 void swap ( int & a, int & b) { int Temp; temp =...
  • SpeedMe
  • SpeedMe
  • 2014年05月06日 11:59
  • 3591

使用迭代器辅助函数advance,distance,iter_swap

迭代器辅助函数advance,distance,iter_swap的使用 advance(iterator,n); 可对迭代器iterator进行增加,增加的幅度由n的值来定 对于双向迭代器和随机存取...

c/c++和java实现swap函数的不同处

c/c++和java实现swap函数的不同处 2014-05-06 11:59 2255人阅读 评论(0) 收藏 举报 本文章已收录于: 分类: ...

SWAP函数的几种写法

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

swap()函数效率对比

在网上看代码,偶然间发现了swap()的另一种写法,利用了位运算,不是很好理解——至少不如朴素的swap()那么直接。 作为OIer,效率至上,我便对比了朴素swap()和“神奇”swap()的效率...

《Effective C++》条款25:考虑写出一个不抛异常的swap函数

swap是两个元素交换的函数,在STL中也有对应的实现,其基本实现为:namespace std{ template void swap(T& a, T& b){ T ...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:关于swap函数
举报原因:
原因补充:

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