C++ 交换阵列

C++ 交换阵列,c++,arrays,swap,C++,Arrays,Swap,是否有一些库功能可以在两个动态分配的数组中交换值。 假设我声明并初始化数组,如下所示: 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

是否有一些
库功能可以在两个动态分配的数组中交换值。
假设我声明并初始化数组,如下所示:

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);  
int*a=新的int[10];
int*b=新的int[5];
对于(int i=0;i<10;i++){
a[i]=i+1;//存储a[10]={1,2,3,4,5,6,7,8,9,10}
}  
对于(int i=0;i<5;i++){
b[i]=i+1;//存储b[5]={1,2,3,4,5}
}  
掉期(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] << " ";
}

动态分配的内存不会以这种方式被触动,唯一改变的是指针
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;
 }
intmain(intargc,char*argv[])
{
int*pA=新的int[10];
int*pB=新的int[5];
if(NULL!=pA&&NULL!=pB)
{
对于(int i=0;i<10;i++)
{
a[i]=i+1;
}
对于(int i=0;i<5;i++)
{
b[i]=i+1;
}
互换(pA和pB);
对于(int i=0;i<5;i++)
{

你不能没有数组,你就有指针。这一区别是至关重要的,因为
std::swap
将交换指针(但不会交换数组)。除非你使用类似
std::vector
的东西并传递引用,否则交换指针也是你所需要的,别忘了
delete[]
你的
new[]<代码>指针。我宁愿说,如果你不需要,就不要使用<代码>新的< /代码>。就像这个例子中。在现代C++中,应该尽量避免自定义内存管理。如果由于某种原因,你仍然需要使用它,最好在某些特殊的类中抽象它。这是C和C++的混合。特别是它忽略了<代码> STD::swap
并忽略其
::swap
实现中的引用。
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;
 }