我创建了一个数组指针作为全局变量,如下所示:
T *bag; bag = new T[size];
我有一个向数组中插入内容的方法;但是,如果它检测到它将溢出数组,我需要调整数组的大小(没有向量).我一直在阅读关于堆栈溢出的问题,但是答案似乎不适用于我,因为我需要将旧数组中的数据复制到新数组中.另外,如果我在方法中创建一个更大的新数组,然后将数据复制到新数组中,一旦方法结束,数组将消失,但我需要它再次成为一个全局变量,这样我的所有方法都可以看到它...我应该如何继续?谢谢
7fhtutme1#
由new分配的内存在方法结束后不会消失。你可以使用引用返回指向新数组的指针:void f(int *&ptr, size_t &size).此外,请注意,您需要在使用后手动清除内存。例如:
new
void f(int *&ptr, size_t &size)
int* newArray = new int[newSize]; ... copying from old array ... int* temp = oldArray; oldArray = newArray; delete[] temp;
sc4hvdpw2#
要调整数组的大小,必须分配一个新数组并将旧元素复制到新数组中,然后删除旧数组。
T * p_bag; p_bag = new T[old_size]; //... T * p_expanded_bag = new T[new_size]; for (unsigned int i = 0; i < old_size; ++i) { p_expanded_bag[i] = p_bag[i]; } delete[] p_bag; p_bag = p_expanded_bag;
您可以使用std::copy来代替for循环。
std::copy
for
bihw5rsg3#
您需要的thing可以执行以下操作
thing
thing与std::vector非常相似,如果不允许使用,您可能需要像std::vector这样的manage a dynamic allocated resource,您可以在该答案链接中参考其实现。如果最终你需要将它 Package 在一个类中,请确保遵循三大规则(C++11中的5条规则)
std::vector
cwxwcias4#
如果你有char/int/doubles数组,或者其他一些基本的数据类型,或者只有这些变量的类,你可以使用realloc。http://www.cplusplus.com/reference/cstdlib/realloc/
bag = (T*) realloc(bag, new_size * sizeof(T));
重新分配自动为新数组分配空间(可能分配到内存中的同一位置),并从给定数组复制所有数据。“内存块的内容将保留为新旧大小中较小的一个,即使该块被移动到新位置。”示例:
#include <stdio.h> /* printf*/ #include <stdlib.h> /* realloc, free */ #include <iostream> int main() { int old_size = 5; int new_size = 10; int *array = new int[old_size]; printf("Old array\n"); for (int i=0; i<old_size; i++) { array[i] = i; printf("%d ", array[i]); } printf("\nArray address: %d\n", array); array = (int*) realloc(array, new_size * sizeof(int)); printf("New array\n"); for (int i=0; i<new_size; i++) printf("%d ", array[i]); printf("\nArray address: %d\n", array); free(array); return 0; }
4条答案
按热度按时间7fhtutme1#
由
new
分配的内存在方法结束后不会消失。你可以使用引用返回指向新数组的指针:
void f(int *&ptr, size_t &size)
.此外,请注意,您需要在使用后手动清除内存。例如:
sc4hvdpw2#
要调整数组的大小,必须分配一个新数组并将旧元素复制到新数组中,然后删除旧数组。
您可以使用
std::copy
来代替for
循环。bihw5rsg3#
您需要的
thing
可以执行以下操作thing
与std::vector
非常相似,如果不允许使用,您可能需要像std::vector
这样的manage a dynamic allocated resource,您可以在该答案链接中参考其实现。如果最终你需要将它 Package 在一个类中,请确保遵循三大规则(C++11中的5条规则)
cwxwcias4#
如果你有char/int/doubles数组,或者其他一些基本的数据类型,或者只有这些变量的类,你可以使用realloc。http://www.cplusplus.com/reference/cstdlib/realloc/
重新分配自动为新数组分配空间(可能分配到内存中的同一位置),并从给定数组复制所有数据。“内存块的内容将保留为新旧大小中较小的一个,即使该块被移动到新位置。”
示例: