gpt4 book ai didi

c++ - 在 C++ 中分别定义和初始化 List

转载 作者:行者123 更新时间:2023-12-01 14:43:40 27 4
gpt4 key购买 nike

我正在用 C++ 为 CFD 软件 OpenFOAM 编写一个插件。对于分析的每个时间步,我的代码将从模型中的每个单元(>100k 单元)读取信息。我有一个名为 C 的 double 列表列表,它在第一个时间步中用零初始化,并在下一个时间步中发生变化,但是大小保持不变。

我的问题是第一个时间步骤中列表的初始化需要太多时间。在接下来的时间步骤中,我可以轻松地遍历列表中的所有元素并对这些值执行一些计算并再次存储它们。然而,在第一个时间步骤中,我有一个大小为 0 的空列表,这意味着我必须附加零来初始化它。我确实知道列表的最终大小,所以我可以轻松编写

Foam::List<Foam::List<double>> C (size,0.0);

在第一步中,我的问题将得到解决(这是 OpenFOAM 特定的列表类 https://www.openfoam.com/documentation/guides/latest/api/classFoam_1_1List.html )

但是,如果我想定义我的列表列表一次,然后在所有时间步骤中使用它,我需要在头文件中定义它。在头文件中我不知道大小,这意味着我将它定义为
Foam::List<Foam::List<double>> C;

在头文件中,然后在 C 文件中用零填充它。这是我的问题 - 如何在 C 文件中用零初始化已定义的列表列表?

如果这是 C#,我可以将它分成两行
List<List<double>> C;
C = new List<List<double>>(size);

并在头文件中写入第一行,在 C 文件中写入第二行(据我所知)。如何在 C++ 中做类似的事情?

非常感谢您对此的帮助。

谢谢,
大卫

最佳答案

假设 Foam::List<Foam::List<double>> C;在您的 .h 中定义-文件和size是一个包含两个列表大小的两元素数组,你应该能够做到:

C=Foam::List<Foam::list<double>>(size[0],Foam::List<double>(size[1],0));

我认为您应该知道的另一件事是关键字 new不应该在 c++ 中用于这样的事情。关键字 new在堆而不是堆栈上分配内存。每当您使用 new您还必须使用 delete稍后以避免内存泄漏。通常这是通过使用 new 来完成的。在 CTOR 和 delete 类中在 DTOR 类中。正如@MaxLanghof 在现代 C++ 中正确指出的那样,您应该始终更喜欢使用智能指针,如 std::shared_pointer。 , std::unique_pointerstd::weak_pointer超过使用 newdelete

关于c++ - 在 C++ 中分别定义和初始化 List,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642854/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com