gpt4 book ai didi

c++ - 如何初始化双**?

转载 作者:行者123 更新时间:2023-11-28 05:37:56 25 4
gpt4 key购买 nike

我需要初始化/使用双**(在我的 header 中声明):

double **pSamples;

分配(在此期间)一个 NxM 的矩阵,其中 N 和 M 从两个函数中获取:

const unsigned int N = myObect.GetN(); 
const unsigned int M = myObect.GetM();

对于我从堆和动态分配中学到的东西,我需要关键字 new,或者使用 STL vector,它将在堆内自动管理分配/释放。

所以我尝试了这段代码:

vector<double> samplesContainer(M);
*pSamples[N] = { samplesContainer.data() };

但它仍然说我需要一个常数值?您将如何分配/管理(在此期间)这个矩阵?

最佳答案

将指针初始化为指针的老式方法对于 new 运算符来说已经足够正确了,您将首先初始化第一个数组,它是指向指针的指针double (double*),然后您将遍历将下一个指针分配给 double (double*)。

double** pSamples = new double*[N];
for (int i = 0; i < N; ++i) {
pSambles[i] = new double[M];
}

第一个 new 分配一个双指针数组,然后每个指针都分配给第二个 new 分配的指针数组。

这是老办法,记得在某个时候使用delete [] 运算符再次释放内存。然而,C++ 提供了很多更好的顺序内存管理,例如 vector,您可以将其用作 vector 的 vector ,或者只是能够容纳整个缓冲区的单个 vector 。

如果你采用 vector 方式的 vector ,那么你有这样的声明:

vector<vector<double>> samples;

您将能够使用 .at 函数来引用元素:samples.at(2).at(0) 或使用数组运算符: 示例[2][0]

或者,您可以创建一个具有足够存储空间的单个 vector,只需将其大小调整为 N * M 个元素即可容纳多维数组。然而,这种方法很难调整大小,老实说,您也可以使用 new 来做到这一点:new double[N * M],但是这会给您一个 double* 而不是 double**

关于c++ - 如何初始化双**?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37806962/

25 4 0
文章推荐: c++ - 控制台崩溃,无法识别错误?
文章推荐: html - Inline-flex 正在为元素添加额外的垂直空间
文章推荐: c++ - Zebra KBTools MC92N0 键盘重新映射 C++ -- "error.h"没有这样的文件或目录
文章推荐: html - 如何仅使用 CSS 设置