首页 > 解决方案 > 交换数组

问题描述

是否有一些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}

标签: c++arraysswap

解决方案


您需要做的就是交换指针。你可以用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

动态分配的内存不会以这种方式被触及,唯一​​改变的是指针ab.


推荐阅读