【问题标题】:How to make a notched matrix?如何制作缺口矩阵?
【发布时间】:2022-01-19 14:09:43
【问题描述】:

我有一个小问题,我不太明白如何在 C++ 中制作 带齿(有缺口?)矩阵。 矩阵应该是这样的(4列6行):

但我不断得到一个三角形形式的矩阵,即没有显示重复的行。我该如何解决? 我附上了一段代码,但我认为它不会有太大帮助。

(N是行,M是列)

for (int i = 0; i < N; i++) { 
   matrix[i] = new double[M]; 
   for (int p = 0; p <= i; p++) { 
      matrix[i][p] = rand() % 101 - 50; 
   cout << setw(5) << matrix[i][p]; 
}

【问题讨论】:

  • 您会很高兴听到您不需要任何人的帮助来解决这个问题,只需一个您已经拥有的工具:您的调试器!这正是调试器的用途。 runs your program, one line at a time, and shows you what's happening,这是每个 C++ 开发人员都必须知道的事情。在调试器的帮助下,您将能够快速找到此程序以及您编写的所有未来程序中的所有问题,而无需向任何人寻求帮助。您是否已经尝试过使用调试器?如果不是,为什么不呢?您的调试器向您展示了什么?

标签: c++ arrays matrix


【解决方案1】:

我假设第一行有 1 列,第二行有 2 列,依此类推,最多 M 列。在这种情况下,以下将起作用。

size_t N = 6;
size_t M = 4;
double **matrix = new double*[N];

for (size_t i = 0; i < N; i++) { 
   size_t cols = std::min( i + 1, M ); // determine the correct number of cols for the row
   matrix[i] = new double[cols]; 
   for (size_t p = 0; p < cols; p++) { 
      matrix[i][p] = rand() % 101 - 50; 
      cout << setw(5) << matrix[i][p]; 
   }
}

顺便说一句,我建议使用比 rand() 更现代的东西。

通常也建议不要使用new,而是更喜欢std::unique_ptrstd::shared_ptr,或者在这种情况下使用std::vector。 也别忘了delete

【讨论】:

  • 并尽量避免新建/删除,例如使用 std::array<:array>,4> 或 std::vector<:vector>>。即使在这段示例代码中,我也缺少必要的“删除”调用(因此它会泄漏内存)
  • 克里斯,非常感谢,它真的奏效了!抱歉,我对编程了解不多,也没有人可以询问这个问题。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-11-17
  • 1970-01-01
  • 1970-01-01
  • 2013-10-05
  • 1970-01-01
  • 2023-03-07
  • 2014-03-13
相关资源
最近更新 更多