如何复制struct Array?

时间:2015-01-20 08:19:26

标签: c++ struct

我被困住了,我不知道如何创建我的阵列副本。如何使用原始内容制作我的struct Person数组的副本?

#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>

using namespace std;


struct Person {
    string name;
    int age;
};

const int arraySize = 2;
Person arrayM[arraySize];
void createArray(Person personArray[], int SIZE);
void printArray(Person personArray[], int SIZE);
int main()
{
    srand(time(NULL));
    cout << "Hello world!" << endl;
    createArray(arrayM, arraySize);
    printArray(arrayM, arraySize);
    return 0;
}

void createArray(Person personArray[], int SIZE)
{
    for(int i = 0; i < arraySize; i++)
    {
        int age1 = rand() % 50 + 1;
        int age2 = rand() % 25 + 1;
        personArray[i].age = age1;
        personArray[i].age = age2;
    }
}

void printArray(Person personArray[], int SIZE)
{
    for(int i = 0; i < SIZE; i++)
    {
        cout << endl;
        cout << personArray[i].age << " " << personArray[i].age;
    }
}

void copyStruct(Person personArray[], int SIZE)
{
    int copyOfArray[SIZE];
    for(int i = 0; i < SIZE; i++)
    {
       ???
    }
}

3 个答案:

答案 0 :(得分:2)

假设,int copyOfArray[SIZE]应该是Person copyOfArray[SIZE]一个只是替换你的???与

copyOfArray[i] = personArray[i];

或使用basile

建议的std :: array

答案 1 :(得分:2)

使用std算法更加惯用。我还将copyOfArray重新键入Person

void copyStruct(Person personArray[], int SIZE)
{
    Person copyOfArray[SIZE];
    std::copy(
        personArray,
        personArray + SIZE,
        +copyOfArray // + forces the array-to-pointer decay. 
    );
    // Do something with it
}

但是,如前所述,您应该使用重载std::vector的{​​{1}}或std::array

答案 2 :(得分:0)

这应该有效:

像这样定义'copyStruct'函数:

void copyStruct(Person destOfArray[], Person srcArray[], int SIZE)
{
    for(int i = 0; i < SIZE; i++) 
    {
        destOfArray[i].age = srcArray[i].age; 
        destOfArray[i].name = srcArray[i].name;
    }
}

并使用类似的功能:

Person copyOfArray[arraySize];
copyStruct(copyOfArray, arrayM, arraySize);

// Now print the content of 'copyOfArray' using your 'printArray' function
printArray(copyOfArray, arraySize);