交换数组
Swapping arrays
是否有一些 library fucntion
可以交换两个动态分配数组中的值。
假设我像这样声明并初始化我的数组:
int * a = new int[10];
int * b = new int[5];
for(int i = 0; i < 10; i++){
a[i] = i + 1; //stores a[10] = {1,2,3,4,5,6,7,8,9,10}
}
for(int i = 0; i < 5; i++){
b[i] = i + 1; //stores b[5] = {1,2,3,4,5}
}
swap(a,b);
我希望 a
存储:{1, 2, 3, 4, 5}
并且数组 b
应该存储: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
您需要做的就是交换指针。您可以为此使用 std::swap
。
#include <algorithm>
int main(int argc, char *argv[])
{
int * a = new int[10];
int * b = new int[5];
for (int i = 0; i < 10; i++) {
a[i] = i + 1; //stores a[10] = {1,2,3,4,5,6,7,8,9,10}
}
for (int i = 0; i < 5; i++) {
b[i] = i + 1; //stores b[5] = {1,2,3,4,5}
}
std::swap(a, b);
for (int i = 0; i < 5; i++)
std::cout << a[i] << " ";
std::cout << endl;
for (int i = 0; i < 10; i++)
std::cout << b[i] << " ";
}
输出:
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
动态分配的内存不会以这种方式触及,唯一改变的是指针 a
和 b
.
的值
只需要改变两个指针的值,所以参数是指针的地址(int **)。
int main(int argc, char *argv[])
{
int * pA = new int[10];
int * pB = new int[5];
if(NULL != pA && NULL != pB)
{
for (int i = 0; i < 10; i++)
{
a[i] = i + 1;
}
for (int i = 0; i < 5; i++)
{
b[i] = i + 1;
}
swap(&pA,&pB);
for (int i = 0; i < 5; i++)
{
cout << a[i] << " ";
}
cout << endl;
for (int i = 0; i < 5; i++)
{
cout << b[i] << " ";
}
}
}
void swap(int**pA, int **pB)
{
int *pTemp = *pA;
*pA = *pB;
*pB = pTemp;
}
是否有一些 library fucntion
可以交换两个动态分配数组中的值。
假设我像这样声明并初始化我的数组:
int * a = new int[10];
int * b = new int[5];
for(int i = 0; i < 10; i++){
a[i] = i + 1; //stores a[10] = {1,2,3,4,5,6,7,8,9,10}
}
for(int i = 0; i < 5; i++){
b[i] = i + 1; //stores b[5] = {1,2,3,4,5}
}
swap(a,b);
我希望 a
存储:{1, 2, 3, 4, 5}
并且数组 b
应该存储: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
您需要做的就是交换指针。您可以为此使用 std::swap
。
#include <algorithm>
int main(int argc, char *argv[])
{
int * a = new int[10];
int * b = new int[5];
for (int i = 0; i < 10; i++) {
a[i] = i + 1; //stores a[10] = {1,2,3,4,5,6,7,8,9,10}
}
for (int i = 0; i < 5; i++) {
b[i] = i + 1; //stores b[5] = {1,2,3,4,5}
}
std::swap(a, b);
for (int i = 0; i < 5; i++)
std::cout << a[i] << " ";
std::cout << endl;
for (int i = 0; i < 10; i++)
std::cout << b[i] << " ";
}
输出:
1 2 3 4 5
1 2 3 4 5 6 7 8 9 10
动态分配的内存不会以这种方式触及,唯一改变的是指针 a
和 b
.
只需要改变两个指针的值,所以参数是指针的地址(int **)。
int main(int argc, char *argv[])
{
int * pA = new int[10];
int * pB = new int[5];
if(NULL != pA && NULL != pB)
{
for (int i = 0; i < 10; i++)
{
a[i] = i + 1;
}
for (int i = 0; i < 5; i++)
{
b[i] = i + 1;
}
swap(&pA,&pB);
for (int i = 0; i < 5; i++)
{
cout << a[i] << " ";
}
cout << endl;
for (int i = 0; i < 5; i++)
{
cout << b[i] << " ";
}
}
}
void swap(int**pA, int **pB)
{
int *pTemp = *pA;
*pA = *pB;
*pB = pTemp;
}