c++ - 使用函数在函数中声明数组值
问题描述
首先,如果我混淆了声明/定义等一些术语,我很抱歉。我目前正在尝试熟悉它们。我的问题是:我必须在我的代码中创建一个大矩阵。我想将它移到文件末尾的单独函数中,以使事情更简单。有什么简单的方法可以做到这一点?我不能使用“向量”,因为我必须稍后将矩阵交给一个不支持“向量”的函数(不要问,这个其他函数不是我写的)。
我目前使用这段代码(因为它正在工作),它在主函数中声明矩阵,这样它就不会超出范围。我希望可以直接在函数中分配矩阵的值,但我无法让它工作。
void make_matrix(float (&matrix_float)[255][4]);
int main()
{
// ...
float matrix[255][4]{ 0 };
make_matrix(matrix);
// ...
}
void make_matrix(float (&matrix_float)[255][4])
{
float preparation[255][4]{ { 0, 0, 0, 0 },
{ 0.639999985694885, 0, 0.800000011920929, 1 },
{ 0, 1, 0, 1 },
// ........
};
for (int i = 0; i < 255; i++)
for (int j = 0; j < 4; j++)
{
{
matrix_float[i][j] = preparation[i][j];
}
}
}
有没有更优雅的方法来做到这一点?
解决方案
问题是:普通数组不可分配。
您可以在定义点初始化数组。但是您以后不能将不同的数组分配给已经存在的数组。
然后,只有元素明智的分配是可能的。正如您在子功能中所做的那样。您应该至少在准备中添加 constexpr。但这不会真正有所作为。将二维数组作为参考传递是一大优势!
你要求一个更优雅的解决方案。Jarod42 已经给出了提示。将矩阵包装在一个 POD(Plain Old Structure)结构中。然后 C++ 将为您创建各种特殊函数,例如赋值运算符。
将新的初始化列表分配给 POD 将起作用。而不是矩阵,您将编写 "pod.matrix" 。而已
请参见下面的示例:
#include <iostream>
constexpr size_t Rows = 3;
constexpr size_t Cols = 4;
struct POD
{
double matrix[Rows][Cols];
};
void makePOD(POD& pod);
int main()
{
// ...
POD pod{};
makePOD(pod);
std::cout << pod.matrix[1][0];
// ...
}
void makePOD(POD& pod)
{
pod = { { { 0.0, 0.0, 0.0, 0.0 },
{ 0.639999985694885, 0.0, 0.800000011920929, 1.0 },
{ 0.0, 1.0, 0.0, 1.0 }
}
};
}
希望这有所帮助 。. .
推荐阅读
- tensorflow - 只有模型继承自的 Tensorflow 模型的基类是什么
- dataframe - pyspark:计算连续 1/0 的数量,如果 streak 变短/变长,则更改它们
- flutter - 如何为 OutlinedButton 设置主题?
- curl - 有没有更好的方法来通知 Slack 关于 GitLab-CI 创建的工件?
- python - 需要帮助定义一个简单的神经网络
- continuous-integration - Gitlab CI/CD:从上游管道有条件地运行下游多级管道
- python - 我的 pygame 没有下载;我收到回溯错误
- android - 如何解决 Android Studio 4.1 中的 Google Sceneform Tools (Beta) Plugin 安装错误?
- c# - 第一次运行 CanExecute 时,CommandParameter 返回 null
- java - Spring Boot Hibernate - 基于唯一键覆盖数据库中的实体