本文主要介绍了C中交换函数编写的总结,本文通过实例代码非常详细的介绍给大家,有一定的参考价值,有需要的朋友可以参考一下。
Swap函数是几乎所有初学者编写的最基本的函数之一,通常用于理解函数概念、形式参与自变量、引用和指针。但是,这个极其基本的功能却起着非常重要的作用。由于交换函数的重要性和普遍性,它必须具有极高的安全性。本文介绍了常见的C语言编程中有多少种方法可以写出- Swap函数?
在说C模板的方法之前,我们先思考一下如何用C语言进行交换。
例如,要交换两个int值,你会想到下面的代码吗:
无效互换(inta,int b)
{
int t=a;
a=b;
b=t;
}
如果不需要临时变量,可以考虑异或。
无效互换(inta,intb)
{
如果(a!=b)
{
a ^=b;
b ^=a;
a ^=b;
}
}
整数比较好理解。如果它们是字符串呢?字符串交换不能用上面类似的方法直接赋值。想想原因?)
//伪代码
void swap(char* a,int sizeofa,char*b,int sizeofb)
{
char temp[MAX]={ 0 };
strncpy(temp,sizeof(temp)-1,a);
strncpy(a,sizeofa-1,b);
strncpy(b,sizeofb-1,temp);
}
当然,如果你也可以使用指针的指针。
无效交换(字符** a,字符** b)
{
char * tmp=* a;
* a=* b;
* b=tmp
}
以上方法都是根据具体类型来处理的。有没有更通用的写法?
让我们看看C如何处理交换:
void交换(字符串a,字符串b)
{
字符串c(a);
a=b;
b=c;
}
是不是和int的很像?
让我们看看标准库中的交换算法是如何实现的:
命名空间标准{
模板类型名称T
无效交换(T a,T b) {
测试温度(a);
a=b;
b=温度;
}
}
模板C是一个非常重要的概念,很多通用算法都可以用模板来实现。上面的std:swap需要类T实现复制构造函数,和上面的实现一样,需要赋值操作,这将导致大量事务请求的性能损失。
因此,在C 11标准中对实现进行了优化。看上面的字符串类交换只需要交换地址。按照这个思路,一般swap中只交换指针,不交换赋值。这种实现可以大大提高性能,并明显提高大型对象的效率。
模板类型名称T
无效交换(时间、容量){
t temp(STD:move(a));
a=STD:move(b);
b=STD:move(temp);
}
是std:move奇怪:)是C 11的新概念,内部实现只是cast。
模板类型名称T
检测类型(自动)移动(T参数)
{
使用ReturnType=remove _ reference _ TT;
return static _ castReturnType(param);
}
c普通编程-有多少种方法写-交换函数?https://www.cppentry.com/bencandy.php? FID=49id=265714
编程数据https://www.cppentry.com
总结
关于C中swap函数编写的总结这篇文章就到这里了,更多关于C中Swap函数的内容,请搜索我们之前的文章或者继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。