改变数组

时间:2011-04-13 15:39:41

标签: c++

我在操作没有矢量的数组时做了很多不同的事情,我想知道是否有任何人可以帮助我在数组中移动元素并扩展数组,同时用元素初始化新空间。我觉得我已经非常接近完成这段代码,但是我已经遇到了障碍。

#include <iostream>
using namespace std;


// Function prototypes
int *reverse(int *, int);
int *expand(int *, int); 
int *shift(int *, int); 
void display(int[], int);
void display2(int[], int);
void display3(int[], int);


int main()
{
    int const SIZE = 5;
    int myArray [SIZE] = {1, 2, 3, 4, 5};
    int myArray2 [SIZE] = {1, 2, 3, 4, 5};
    int myArray3 [SIZE] = {1, 2, 3, 4, 5};

    int *arraPtr;
    int *arraPtr2;
    int *arraPtr3;

    arraPtr = reverse(myArray, SIZE);

    display(myArray, SIZE);

    arraPtr2 = expand(myArray2, SIZE);

    display2(myArray2, SIZE);

    arraPtr3 = shift(myArray3, SIZE);

    display3(myArray3, SIZE);

    delete [] arraPtr;
    delete [] arraPtr2;
    delete [] arraPtr3;


    return 0;
}



int *reverse(int *arr, int size)
{
    int *copyArray;
    int posChange;

    if( size < 0)
        return NULL;

    copyArray = new int[size];

    for (int index = 0; index < --size; index++)
    {
            posChange = arr[index];
            arr[index] = arr[size];
            arr[size] = posChange;

    }
    return copyArray;

}


int *expand(int *arr, int size)
{
    int *newArray;

        newArray = new int[size * 2];
memcpy( newArray, arr, size * sizeof(int));
for (int index = size; index < (size*2); index++)
    newArray[index] = 0;
return newArray;




}

int *shift(int *arr, int size)
{
    int *newArray;
    newArray = arr;
    newArray = new int [size + 1];
    for (int index = 5; index > 0; index--)
        newArray[index] = newArray[index - 1];

return newArray;


}

void display(int arr[], int size)
{
    for (int index = 0; index < size; index++)
    {
        cout << arr[index] << " ";
    }

        cout << endl;
}

void display2(int arr[], int size)
{
    for (int index = 0; index < size; index++)
    {
        cout << arr[index] << "  ";
    }
        cout << endl;

}

void display3(int arr[], int size)
{
    for (int index = 0; index < size; index++)
    {
        cout <<arr[index] << "  ";
    }
        cout << endl;

}

3 个答案:

答案 0 :(得分:1)

这主要是C代码,但我会尝试给你一些关于你正在做什么的方法的提示,而不是语法:

在你的反向函数中,你实际上从未将任何东西放入新数组中。您可以向后运行原始循环,而不是在for循环中进行一些交换,而是将元素放入新数组中。

在扩展函数中,看起来你正在尝试做两件相反的事情,将内存从输入数组复制到新数组,然后用全零覆盖新数组。如果你想手动复制内存,你需要让循环只去原始数组将其值复制到新数组中(而不是通过原始数组的两倍大小,否则你将走出它的尽头! )。如果你想使用memcpy,那就去掉for循环。

我不确定您想要移位功能做什么,但它现在只是复制数组。

答案 1 :(得分:1)

只有两个编译错误:int newArray;应为int* newArray;#include <cstring>缺失(memcpy()必需)

此外,行display(myArray, SIZE);可能是display(arraPtr, SIZE);,同样也是display2(myArray2, SIZE); - 否则您只显示原始数组,而不是函数调用的结果。< / p>

但是,这可能会受益于更安全,更通用的C ++算法,至少std::copy()std::reverse_copy()

int *reverse(int *arr, int size)
{
    int *copyArray = new int[size];
    std::reverse_copy(arr, arr+size, copyArray);
    return copyArray;
}
int *expand(int *arr, int size)
{
    int *newArray = new int[size * 2]();
    std::copy(arr, arr+size, newArray);
    return newArray;
}
int *shift(int *arr, int size)
{
    int* newArray = new int [size + 1]();
    std::copy(arr, arr+size, newArray+1);
    return newArray;
}

完整计划:https://ideone.com/RNFiV

答案 2 :(得分:0)

我不确切地知道你想要完成什么,但我认为它是这样的:

#include <iostream>
#include <cstring> // Needed to compile on most compilers(memcpy), dunno in yours
using namespace std;


// Function prototypes
int *reverse(int *, int);
int *expand(int *, int); 
int *shift(int *, int); 
void display(int[], int);
void display2(int[], int);


int main()
{
    int const SIZE = 5;
    int myArray [SIZE] = {1, 2, 3, 4, 5};
    int myArray2 [SIZE] = {1, 2, 3, 4, 5};
    int myArray3 [SIZE] = {1, 2, 3, 4, 5};

    int *arraPtr;
    int *arraPtr2;

    arraPtr = reverse(myArray, SIZE);

    display(arraPtr, SIZE);

    arraPtr2 = expand(myArray2, SIZE);

    display2(arraPtr2, SIZE * 2);

    delete [] arraPtr;
    delete [] arraPtr2;


    return 0;
}



int *reverse(int *arr, int size)
{
    int *copyArray;
    int posChange;

    if( size < 0)
        return NULL;

    copyArray = new int[size];

    for (int index = 0; index <= --size; index++)
    {
            posChange = arr[index];
            copyArray[index] = arr[size];
            copyArray[size] = posChange;

    }
    return copyArray;

}


int *expand(int *arr, int size)
{
    int *newArray;

    newArray = new int[size * 2];
    memcpy( newArray, arr, size * sizeof(int));
    for (int index = size; index < (size*2); index++)
        newArray[index] = 0;
    return newArray;
}

int *shift(int *arr, int size)
{
    int *newArray;
    newArray = new int [size + 1];
    memcpy( newArray, arr, size * sizeof(int));


return newArray;


}

void display(int arr[], int size)
{
    for (int index = 0; index < size; index++)
    {
        cout << endl << arr[index] << " ";
    }
}

void display2(int arr[], int size)
{
    for (int index = 0; index < size; index++)
    {
        cout << arr[index] << " ";
    }
}

作为旁注,如果你有这类东西的问题,你应该看看任何讨论指针和指针算术的好的C资源,当你必须做低级C ++代码时它会派上用场。