我有这个代码片段
int i = 5;
int k = 7;
int * iPtr;
int * jPtr;
int * kPtr;
iPtr = &i;
kPtr = &k;
Run Code Online (Sandbox Code Playgroud)
我需要使用指针交换i和k.这就是我这样做的方式:
*jPtr = *kPtr ;
*kPtr = *iPtr ;
*iPtr = *jPtr ;
Run Code Online (Sandbox Code Playgroud)
这是最好的方法吗,还是有更好的方法?
wil*_*ell 11
在我看来,在C++中做到这一点的最好方法是std::iter_swap()
:
#include<algorithm>
// ...
int *iPtr = &i, *kPtr = &k;
std::iter_swap(iPtr, kPtr);
Run Code Online (Sandbox Code Playgroud)
你可能认为这是一种矫枉过正,但如果你包括在内,我会不同意<algorithm>
.当然,在作业的情况下,如果教师的意图是让您熟悉STL,这个答案就成立了.如果目的是向您介绍指针,那么最好的解决方案是引入一个临时变量j
:
int j;
int *iPtr = &i, *kPtr = &k, *jPtr = &j;
*jPtr = *kPtr;
*kPtr = *iPtr;
*iPtr = *jPtr;
Run Code Online (Sandbox Code Playgroud)
只是为了好玩,这将没有第三个变量...
*iPtr ^= *kPtr;
*kPtr ^= *iPtr;
*iPtr ^= *kPtr;
Run Code Online (Sandbox Code Playgroud)
这是一种旧的汇编语言技巧:XOR交换算法
归档时间: |
|
查看次数: |
8320 次 |
最近记录: |