c ++从重复数组创建子数组

时间:2012-10-01 19:05:17

标签: c++ arrays pointers

这里是我的代码,我不允许在子阵列函数中使用循环我很困惑也许有人可以指向我正确的方向我觉得我几乎在那里..

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

if (size<=0)
    return NULL;

newArray = new int[size];

for (int index=0;index<size;index++)
    newArray[index]=arr[index];

return newArray;
}

int* subArray(int *sub, int start, int length)
{

 int aa[10]={1,2,3,4,5,6,7,8,9,10};
 int *dup;
 dup = aa;
 duplicateArray(dup,10);
 return dup;


}

int main()
{   cout << "Testing subArray: " << endl 
         << "Expected result: 5, 6, 7, 8 " << endl;
int *subArr;
int start = 5;
subArr = subArray(subArr, 5,4);
for (int index = start; index<10; index++)
    cout << subArr[index];
delete [] subArr;
subArr = 0;

1 个答案:

答案 0 :(得分:2)

所以,由于这是家庭作业,我将避免直接发布解决方案。你这么说;

  

我不允许在子数组函数中使用循环

然而,目前,subArray调用duplicateArray,它使用循环。这似乎与要求的精神相冲突。

由于您没有另行说明,我假设subArray应该复制 start与结尾之间的参数内容。那么,我们知道什么?

我们知道返回数组的大小应该是length - start个元素。我们也知道(好吧,也许)存在一个名为memcpy的函数,它允许你将一个字节块从一个地方复制到另一个地方(假设它们没有重叠)。

(请注意我在这里建议memcpy,因为我们正在处理POD类型(Plain Old Data),因为我怀疑你的课程已经深入研究STL。将来你会更好地服务于像std::copy()这样的东西,但现在可以了。)

所以,按顺序,我们需要:

  1. 使用length - start元素声明要返回的新数组。 您必须动态分配此数组!目前,您正在返回指向本地声明的数组的指针。一旦函数返回,该指针就会变为无效。

  2. length - start复制sub + start元素(元素,而不是字节!确保考虑元素的数量以及单个元素的大小)到这个新数组中。

  3. 返回新数组(指针真的)。

  4. 如果我某某方面违反了您的任务要求或意图,那么您需要为我详细说明您的问题。目前没有太多可以继续下去。