【问题标题】:How to populate an array with a certain size into another one with a bigger size on c++? [closed]如何在 C++ 上将具有一定大小的数组填充到另一个更大的数组中? [关闭]
【发布时间】:2019-01-30 18:22:17
【问题描述】:

我正在尝试将一组角度填充到另一个具有更多元素的角度:

uint16_t _sector[SECTORS_MAX] = {0, 45, 90, 135, 180, 225, 270, 315};

我的想法是,我有另一个包含 72 个元素的数组,而上面的这个只有 8 个元素,上面的每个角度代表一个扇区,因此 72 个元素的数组每个扇区将有 9 个角度而不是一个,其中每个9个角代表一个扇区。我如何制作一个能够做到这一点的循环?

【问题讨论】:

  • "我如何制作一个能够做到这一点的循环?" - 究竟做了什么?你想达到什么目标?您解释了您的数据结构,然后询问如何设法做到这一点,但仍然没有提供实际任务。请详细说明
  • 为什么不直接使用std::vector
  • 默认情况下,我有一个数组,它消耗 8 个角度,代表距离传感器的 8 个不同扇区,每个角度是中心的中心角,宽度为 45 度,我想使用另一个驱动程序对于这个传感器,其中扇区总数为 72,因此 72 个角度代表它的中间。但是我仍然不想扩展现有的阵列,因为我想安排 72 个扇区,其中前 9 个属于原始阵列的第 1 个扇区,即 0,依此类推。
  • 目前还不清楚你在问什么。你能以某种方式让它更清楚吗?你想怎么比较?
  • 我很困惑。所以你想要一个数组,其元素按360/72 = 5 的值递增? std::vector<int> v(72); std::iota(v.begin(), v.end(), 0); std::transform(v.begin(), v.end(), v.begin(), [](int i) { return i * 5; }); 够用吗?

标签: c++ arrays loops populate


【解决方案1】:

由于每个扇区有 9 个角度,因此您还需要 #define ANGLES_MAX

#define SECTORS_MAX 8
#define ANGLES_MAX 9

然后您需要使用二维数组来存储角度:

uint16_t SectorAngles[SECTORS_MAX][ANGLES_MAX];

假设包含 72 个角的数组的名称是 TotalAngles 应该是这样定义的:

uint16_t TotalAngles[72];

现在您可以将角度从TotalAngles 复制到SectorAngles,如下所示:

for(int i = 0; i < SECTORS_MAX; i++)
{
    for(int j = 0; j < ANGLES_MAX; j++)
    {
        SectorAngles[i][j] = TotalAngles[i*8 + j];
    }
}

【讨论】:

  • "你需要#define ANGLES_MAX" - 当你可以使用正确的constconstexpr时不要使用预处理宏变量我>。 #define 在现代 C++ 中通常是一种巨大的代码气味。
猜你喜欢
  • 1970-01-01
  • 2020-02-19
  • 2010-12-30
  • 1970-01-01
  • 2015-12-09
  • 1970-01-01
  • 1970-01-01
  • 2022-01-05
  • 1970-01-01
相关资源
最近更新 更多