C++中怎么编写返回两个值的函数?

我的意思是说,想编写一个函数,将调用的两个值互换,怎么实现?注意是在函数(即子程序)中,而不是在主程序中... 我的意思是说,想编写一个函数,将调用的两个值互换,怎么实现?注意是在函数(即子程序)中,而不是在主程序中 展开
 我来答
计都罗睺公爵
2011-11-11 · TA获得超过994个赞
知道答主
回答量:35
采纳率:100%
帮助的人:53.5万
展开全部
首先我需要你确定你学的是C++而不是C语言,这个很重要。其他人的回答全是C中的方法,我将完全站在C++的角度来回答这个问题。
其实这是一个好问题!交换函数swap()是C++中编写异常安全函数的基础。在标准库中的swap的实现如下:
template<typename T>
void swap(T& a, T& b)
{
T temp(a);
a = b;
b = temp;
}
这正是一个大众化的实现方法,对于int,double,string甚至你写的一些简单的类都可以快速的完成。但是在某些时候这样的一个函数存在严重的效率问题。我想你应该明白在C++中基本成分是类,操作的是类的实体化即对象,那在C++的函数中除了会交换内置类型(int,double等)外,更多的是交换两个对象。如果你理解这个了,请考虑这样一个问题:我们为了使数据高度封装,通常采用一种pimple手法,就是将一个类中的数据单独拿出使之成为一个类,在原类中用一个指针指向这个数据类,设计出来大概有这样的形式:
class A
{
public:
拷贝构造函数;
复制赋值函数;
。。。其他函数不写了
private:
A_Data * data; //指向数据的指针,指向的可能是几百兆甚至上G的数据
};

class A_Data
{
public:
一些必要的函数
private:
std::vector<double> v;//这个就是存储数据的实体,可能存储的是图片,文件等大数据
。。。你还可以有其他的数据
};
依照C++泛型编程的思想,我们要交换A的连个对象a1与a2,肯定会先想到使用标准库中的swap(),但是那个函数不知道在数据data交换时只交换指针,所以整个运行过程就会是它复制了三个A对象,还复制了三个A_Data对象,效率问题就出现了。
还是依照泛型编程的思想,我们可以对标准库的swap进行特化,但为了与标准库达到一致性,我们这么做:在A中定义一个swap的public函数做指针置换的工作,然后在类的外部进行std::swap的特化,在这个特化函数中调用A的成员函数。做出来就是这样的形式:
class A
{
public:
。。。其他函数不写了
void swap(A& a)
{
using std::swap;//这个声明很重要,告诉编译器我下面要调用的是标准库的swap
swap(data, a.data);//用标准库的swap交换指针
}
private:
A_Data * data; //指向数据的指针,指向的可能是几百兆甚至上G的数据
};
//下面是swap的特化
namespace std
{
template<>
void swap<A>(A& a1, A& a2)
{
a1.swap(a2);
}
}
这样就可以了。但要着重提醒的是,成员函数swap决不能抛出异常!这是异常安全性的要求,这个我就不说了。。。
但是如果遇到的不是类,而是模板类,那情形的分析就变的更复杂了。。。如果你真的需要,那咱们再说,就先这样吧!
追问
额……是 VC++ 中的 C 语言
wooden954
推荐于2017-09-28 · TA获得超过1万个赞
知道大有可为答主
回答量:6135
采纳率:93%
帮助的人:884万
展开全部
void swap(int *p,int *q){
  int temp
  temp=*p;
  *p=*q;
  *q=temp;
}
void main(){
  int a,b;
  scanf("%d,%d\n",&a,&b);
  swap(&a,&b);
  cout<<"a="<<a<<endl<<"b="<<b;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
NGC6520
2011-11-09 · TA获得超过189个赞
知道小有建树答主
回答量:243
采纳率:0%
帮助的人:174万
展开全部
C++的任何函数只可能返回一个值
要实现你的意图只能将用 引用形参

void swap(int &a,int &b)
{
int temp=a;
a=b;
b=temp;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2011-11-09 · TA获得超过105个赞
知道小有建树答主
回答量:261
采纳率:100%
帮助的人:136万
展开全部
全局变量和局部变量的问题吧?
你试试
通过一个函数 计算多个返回值 用全局变量 不过不推荐 因为全局变量不好控制
我也是刚刚学 有错误还请高手大神指出 共同进步
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
lhxwoneng
2011-11-09
知道答主
回答量:10
采纳率:0%
帮助的人:6.9万
展开全部
以交换两个整数为例:
int Exchange(int &a , int &b)
{
int temp;
temp = a;
a = b;
b = temp;
return 1;
}
调用:
x = 1;
y = 0;
exchange(x, y);
追问
请问 return 1 是什么意思呢?
追答
因为子函数返回值是整型,不写返回值会编译错误,所以可以return 1其他的整数。也可以什么都不返回 定义为void,像楼上。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式