2012-10-01 27 views
1

这里是我的代码和IM不允许使用在子阵列功能IM循环很困惑,也许有人可以点我在正确的方向我感觉像IM几乎有..C++从数组重复创建一个子阵

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; 
+0

看看[this](http://stackoverflow.com/a/3902230/1387612) – janisz

+0

我想'subArray'你想调用'duplicateArray'传递'sub + start'来表示第一个元素要复制的数组以及“length”作为数组大小。 –

回答

2

因此,由于这是作业,我将避免直接发布解决方案。你说那个;

IM不允许在子阵列功能

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

因为我们还没有说,否则,我假设subArray应该复制start和端之间的争论内容。那么,我们知道什么?

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

(请注意,我在这里建议memcpy因为我们正在处理的POD类型(Plain Old Data),也因为我怀疑你的班级已经开始钻研STL,在未来你会像std::copy()得到更好的服务,但现在这是确定)

因此,为了,我们需要:

  1. 声明新的数组元素length - start返回。 你必须动态分配这个数组!目前你正在返回一个指向本地声明数组的指针。该函数返回后该指针立即失效。

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

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

如果我以某种方式违反了您的任务的要求或意图,那么您需要为我详细阐述您的问题。目前没有太多可以继续。