【发布时间】:2021-09-16 23:04:36
【问题描述】:
上下文:我有一个类 E(将其视为有机体)和一个结构体 H(有机体中的单个细胞)。目标是估计 E 的一些特征参数。H 具有存储在多维矩阵中的一些属性。但是,尺寸取决于 E 的参数。
E 从输入文件中读取一组参数,声明一些 H 类型的对象,解决它们的每个问题并填充矩阵,计算似然函数,将其导出,然后转到下一组参数。
我曾经做过的事情: 我曾经在 H 的 header 中声明指向指向指针的指针,并将内存分配推迟到 H 的构造函数。这样,E 可以将参数传递给构造函数,然后可以进行内存分配。我在析构函数中释放了内存。
问题:昨天,我意识到这是bad practice!所以,我决定尝试向量。我已经阅读了几个教程。目前,我唯一能想到的就是使用问题here 中使用的 push_back()。但是,我感觉这可能不是最佳实践(正如许多人提到的,例如,here,在方法 3 下)。
与此相关的问题有几十个,但没有一个直接回答这个问题:如果事先不知道尺寸,最好的做法是什么?
任何建议都有帮助:我还有其他解决方案吗?我应该坚持使用数组吗?
【问题讨论】:
-
有许多不同的方法来处理
vector维度,如link you provided 中所述。它们都非常好,但适用于不同的用例。那么你对他们的实际问题是什么?无论如何,只要你正确地遵循Rule of 3/5/0,使用指向指针(甚至只是指针)并没有错,大多数人一开始不会这样做。 -
我在析构函数中解除了内存分配。 -- 如果在你最初分配的时候任何这些分配在中间的某个地方失败了,你是如何处理这个问题的?我在问,因为指针到指针的东西总是有一些人们没有想到的重要细节——如果内存分配失败。
-
如果事先不知道尺寸,最好的做法是什么? --
resize(),push_back(),emplace_back(),insert()(我忘记了吗? ?)。那么在这些中,哪一个适合您想要完成的目标? -
我不知道,@PaulMcKenzie。可能我所做的一个原因被认为是不好的做法。 (这也部分与 Remy 的观点有关:看来我没有遵循三定律——例如,我没有处理分配失败。)
-
@PaulMcKenzie,他们都有效。但是,我不确定哪个最有效。
标签: c++ arrays stdvector push-back