在没有向量、指针的情况下在 C++ 中在运行时增加数组大小 [关闭]

Posted

技术标签:

【中文标题】在没有向量、指针的情况下在 C++ 中在运行时增加数组大小 [关闭]【英文标题】:Increase array size at runtime in c++ without vector, pointer [closed] 【发布时间】:2015-05-22 13:08:28 【问题描述】:

我已经在 c++ 中声明了一个具有一定大小的 int 数组。 比如说,int a[6]

在运行时如果我的数组大小超过 6,那么我需要增加它。

我不会使用指针,向量,大小不会由用户给出。

【问题讨论】:

你有什么理由不使用 std::vector 吗?如果没有,请使用它! ***.com/questions/756906/…的可能重复 为什么在 C++ 中使用 malloc/calloc?新是一天的秩序 我通常不会这么说,但我建议你问这个 C 或 C++ 的问题(或问两个问题)。这两种语言在这方面的差异如此之大,您不妨将 C 和 Java 标记为您将获得的所有重叠部分。 这不是任何东西的重复,也不是不清楚的。如果您不知道答案,请不要关闭它,提出您的疑问并得到澄清。 【参考方案1】:

C 数组在编译时静态解析,因此无法在运行时调整大小。

如果您不想使用std::vectormallocnew,还有另一种选择:声明一个“足够大”的数组,然后将使用的元素数保存在另一个变量中。例如:

int a[big_enough];
size_t a_size = 0;

但我的建议绝对是使用std::vector!例如:

std::vector<int> a(6);

初始化6个ints等于0的向量。

如果你需要改变它们的值,你可以使用

a[i] = 3;

其中i 是介于05 之间的整数(即a.size())。

顺便说一句,您通常不想明确设置矢量大小。将其声明为空,然后逐个添加元素。例如:

std::vector<int> a;
a.push_back(-3);

【讨论】:

我不确定“C 数组不能在运行时调整大小”。是正确的。你可以delete(free)数组然后创建new(malloc)std::vector 像这样工作。但是在std::vector 中,你可以忘记直接使用内存,因为这个类对你有用 嘿,我知道我可以使用矢量。除了矢量还有其他方法吗?? @Praveenkumar:- 检查我的答案。那是另一种方法。 @Praveenkumar 我已经更新了我的答案。希望有用。 @MikeMinaev 数组和使用 malloc 分配的内存完全不同在于:数组是在堆栈上保留的静态内存,malloc 在运行时在空闲存储上分配动态内存。【参考方案2】:

您不能在运行时更改数组的大小。另一种方法是创建一个比现有数组更大的新数组。将现有数组的元素复制到新数组并删除现有数组。并更改成员变量,ptr 和 size。

类似这样的:

int* newArray = new int[sizeOfArray];
std::copy(oldArray, oldArray + std::min(sizeofOldArray, sizeOfArray), newArray);
delete[] oldArray;
oldArray = newArray;

最好使用std::vector

【讨论】:

以上是关于在没有向量、指针的情况下在 C++ 中在运行时增加数组大小 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 中在没有 UIImageView 的情况下在视图上绘制/绘制 UIIMage

用向量 c++ 中的指针成员初始化对象

在运行时将指针推送到向量 C++

在 Struts 2 中在没有查询字符串的情况下在 URL 中传递参数

将指针向量元素推回非指针向量c ++时出错

在没有显式命令的情况下在函数调用之间清除数组指针数据?