c++从一个重复的数组中创建一个子数组

c++ creating a subarray from a duplicate array

本文关键字:数组 一个 创建 c++      更新时间:2023-10-16

这是我的代码,我不允许在子数组函数中使用循环。我很困惑,也许有人可以给我指正确的方向。我觉得我差不多到了。。

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;

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

im不允许在子阵列函数中使用循环

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

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

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

(请注意,我在这里建议memcpy,因为我们处理的是POD类型(纯旧数据),而且我怀疑您的类是否深入研究了STL。在未来,像std::copy()这样的东西会更好地为您服务,但目前还可以)

因此,为了有序,我们需要:

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

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

  3. 返回新数组(实际上是指针)。

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

相关文章: