动态创建一个新数组,其中原始数组中的每个项目都复制给定次数

时间:2015-07-28 21:12:41

标签: c++ dynamic-arrays

我不希望你为我做整个功能......我只需要一些提示。

例如,如果我有一个类似:{1,2,3} ...

的数组

它应该看起来像:{1,1,2,2,3,3}

编辑:到目前为止,这是我的功能:

int ExpandArray(const int expanded[], const int arrayLength, const int duplicate, int* newSizePtr)
{
    int newLen = arrayLength * duplicate;

    int newArray[] = new newArray[newLen];
    return newArray;
}

3 个答案:

答案 0 :(得分:1)

This is the final result

int* ExpandArray(const int[], const int, const int, int*);

int main
{
     int arr[] = {1, 2, 3};
     int size;

     int * expanded = ExpandArray(arr, 3, 2, &size);

      cout << "{ ";
     for(int i = 0; i < size; i++)
          cout << expanded[i] << " ";
      cout << "}" << endl;

      delete [] expanded;

     cout << endl;
}


int* ExpandArray(const int expanded[], const int arrayLength, const int duplicate, int* newSizePtr)
{
int newLen = arrayLength * duplicate;
*newSizePtr = newLen;
int *newArray = new int[newLen];

for (int i=0; i < newLen; i++) {
    newArray[i] = expanded[i/duplicate];
}




return newArray;
}

答案 1 :(得分:0)

试试这个:

void myFunction (int p[], int *q) {
    int pLen = sizeof(p)/sizeof(*p);
    int *q =  (int *) malloc(pLen * sizeof(int));

    for(int i = 0, j = 0; j < pLen; i += 2, j++) {
        q[i] =  p[j];
        q[i+1] = p[j]; 
    }

    for(int i = 0; i < pLen*2; i++) {
        cout << q[i] << " ";
    }
}

Run live.

答案 2 :(得分:0)

您的要求有点不清楚。重复是指初始数组中的单个项目应出现在最终数组中的次数吗?我会假设你的意思是基于你到目前为止的代码。

由于你知道初始数组中每个项目应该在最终数组中有多少,我要做的是遍历初始数组中的每个元素。现在,在每个元素的每个循环中,将其添加n次(或重复次数)到最终数组。您可以为最终数组使用单独的计数器,因为它需要在一个循环中多次递增。