打印2d数组,C ++

时间:2015-05-21 03:59:38

标签: c++ multidimensional-array

我来自Matlab,我可以右键单击一个2D矩阵,看看里面有什么类似excel的可视化。现在我正在使用C ++(Visual Studio),我正在寻找类似于2D阵列的东西,例如像以下的可视化:

myArray = [ 1 2 3
            4 5 6
            7 8 9 ]

用C ++做这样的事情最好的方法是什么?

2 个答案:

答案 0 :(得分:2)

首先,这不是C ++中数组声明/初始化的正确语法。我不知道是否有任何可以为您显示数组的IDE,但您可以在代码中使用这样的两个for循环来完成。这也显示了数组的正确语法。

#include <iostream>

using namespace std;

int main(int argc, char **argv)
{
  int myArray[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
  };

  for (int i=0; i<3; ++i) {
    for (int j=0; j<3; ++j)
      cout << myArray[i][j] << ' ';
    cout << endl;
  }

  return 0;
}

或者,如果您想方便调试,可以像这样定义预处理器指令

#include <iostream>
#include <iomanip>

using namespace std;

#define test_array(name,ni,nj,w)      \
  cout << #name " = {\n";             \
  for (int i=0; i<ni; ++i) {          \
    cout << "  ";                     \
    for (int j=0; j<nj; ++j)          \
      cout << setw(w+1) << myArray[i][j]; \
    cout << endl;                     \
  }                                   \
  cout << '}' << endl;

int main(int argc, char **argv)
{
  int myArray[3][3] = {
    {1, 2, 3},
    {4, 5, 6},
    {7, 8, 9}
  };

  test_array(myArray,3,3,2)

  return 0;
}

第四个参数将允许您设置列宽,因此您可以很好地对齐。

答案 1 :(得分:1)

如果您将输出引用到控制台,那么您只需编写一个接收数组及其大小的函数,然后使用cout将该信息打印到控制台。

但是,如果您使用它进行调试,则还有另一个数据可视化选项:当它到达您在程序中设置的断点时将鼠标悬停在变量上。这里有一些注意事项:如果我正确回想起来,如果动态分配了数组,Visual Studio将不会自动显示鼠标悬停可视化中的整个元素范围,因为IDE不知道数组的大小正确显示它。如果您使用静态大小的数组或任何STL容器类,将解决此问题,其中一个 - vector - 通常建议用于代替动态分配的数组,因为它们会自行管理它们内存并提供几个有用的函数来操作它们包含的数据集。

随着您进一步深入C ++,您最终可能会创建自己的类来保存矩阵,或者下载实现该类的库。如果要在最终情况下以您喜欢的方式查看包含的信息,您还可以使用Visual Studio的一种自定义数据可视化的方法。我喜欢Natvis,因为它很容易学习并快速获得结果。