【发布时间】:2013-03-27 11:26:27
【问题描述】:
我在这里搜索了很多主题,但他们似乎没有准确回答我。
我正在尝试在 C++ 中进行一些动态重新分配 od 数组。我不能使用 STL 库中的任何东西,因为我需要在明确禁止 STL(向量,...)的作业中使用它。
到目前为止,我已经尝试使用如下代码进行详细说明:
int * items = new int[3]; //my original array I'm about to resize
int * temp = new int[10];
for (int i = 0; i < 3; i++) temp[i] = items[i];
delete [] items; //is this necessary to delete?
items = new int [10];
for (int i = 0; i < 10; i++) items[i] = temp[i];
delete [] temp;
这似乎可行,但令我困扰的是迭代次数过多。这不能更聪明地完成吗?显然,我正在使用比这更大的数组。不幸的是,我必须使用数组。
编辑:当我尝试做 items = temp; 而不是
for (int i = 0; i < 10; i++) items[i] = temp[i]; 并尝试 std::cout 我所有的元素,我最终会丢失前两个元素,但 valgrind 可以正确打印它们。
【问题讨论】:
-
当这是家庭作业时,更聪明的做法是封装它,即重写你需要的 std::vector 部分......取决于你对“stl”的定义,你也许可以使用 std::copy 之类的东西来封装复制过程。
-
记住指针是普通变量,因此可以重新赋值...
-
我接触 C++ 已经有一段时间了,但是,您是否需要将 items[] 复制到 temp[] 然后从 temp[] abck 复制到 items[]?你不能只创建一个指向 items[] 的新指针 -
int *temp = items;然后重新创建项目 -items = new int[10]。从temp复制到items- 也许看看memcopy函数或std::copy函数以最有效地完成此操作。然后删除temp。 -
@wmorrison365
int * temp = items;使我的程序崩溃。 -
@wmorrison365 非常感谢!
copy (temp, temp+10, items);就像一个魅力!