在C ++ / Cli

时间:2016-04-07 08:07:01

标签: multidimensional-array c++-cli

我用这一行来创建一个元组数组:

Tuple<String^, double>^ t = gcnew Tuple<String^, double>("a", 2.6);

但是如何创建多维数组呢?

E.g:

t[][] = {
        {"a", 2.6},
        {"b", 7.1},
        {"c", 2.4},
        {"d", 2.7}
};

即使我们这样做,我怎样才能获得数组中的元素,例如:

for (int i = 0; i < 4; i++){
        textBox1->Text += t[i][0];
}

1 个答案:

答案 0 :(得分:2)

使用MSDN

using namespace System;

int main()
{
  const unsigned rank = 2;
  const unsigned dim1 = 3;
  const unsigned dim2 = 4;

  auto arr = gcnew array<Tuple<String ^, double> ^, rank>(dim1, dim2);

  for(int i = 0; i < dim1; i++)
    for(int j = 0; j < dim2; j++)
      arr[i, j] = gcnew Tuple<String ^, double>("@_@", i * j);

  return 0;
}

rank是数组的维数,所以在这种情况下它是一个二维数组。

<强> UPD

使用聚合初始化:

using elemT = Tuple<String ^, double>; // somewhere at top-level

  //...
  auto arr =
    gcnew array<elemT ^, rank>{{gcnew elemT{"@_@", 1.}, gcnew elemT{"^_^", 2.}},
                               {gcnew elemT{"~_~", 3.}, gcnew elemT{"+_+", 4.}}};

<强> UPD2

随着神秘面纱的揭晓,OP并不需要多维数组,只需要一组元组:

#include <iostream>

using namespace System;
using subarrT = array<double>;
using elemT   = Tuple<String ^, String ^, subarrT ^>;
int main()
{
  auto arr = gcnew array<elemT ^>{
    gcnew elemT{"Name1", "Surname1", gcnew subarrT{29., 123., 10., 1230.}},
    gcnew elemT{"Name2", "Surname2", gcnew subarrT{49., 32., 8., 256.}},
  };
  std::cout << static_cast<double>(arr[0]->Item3[1]) << std::endl; // 123.
  return 0;
}