配列

C++/CLIの配列は[ ]ではなく、arrayキーワードを使います・・・って、もう何度も使っているので今更感漂いますが。(^^;

#include "stdafx.h"
#include <cstdio>

using namespace System;

void print_array(array<int>^ args) 
{
    for each (int n in args) 
        printf("%d ", n);
    printf("\n");
}

void print_array(array<int, 2>^ args)
{
    for (int i = 0; i < args->GetLength(0); ++i) {
        for (int j = 0; j < args->GetLength(1); ++j)
            printf("%d ", args[i, j]);
        printf("\n");
    }
}

void print_array(array<array<int>^>^ args)
{
    for (int i = 0; i < args->Length; ++i) {
        for (int j = 0; j < args[i]->Length; ++j)
            printf("%d ", args[i][j]);
        printf("\n");
    }
}

// 可変引数(C#のparams相当)
void varargs_func(... array<int>^ args)
{
    print_array(args);
}

int main(array<System::String ^> ^args)
{
    // int型、要素数3の配列。初期値は0
    array<int>^ a0 = gcnew array<int>(3);
    // 初期値あり
    array<int>^ a1 = {1, 2, 3};
    // 最後に,があってもよい
    array<int>^ a2 = {4, 5, 6,};

    puts("#a0");
    print_array(a0);
    puts("#a1");
    print_array(a1);
    puts("#a2");
    print_array(a2);

    // array<型, 次元>
    // 2x3配列
    array<int, 2>^ b0 = gcnew array<int, 2>(2, 3);
    // 2x3配列。初期値あり
    array<int, 2>^ b1 = {{1,2,3}, {4, 5, 6}};
    // 2x3配列。値の不足しているところは0が補われる
    array<int, 2>^ b2 = {{7}, {8, 9, 0}};

    puts("#b0");
    print_array(b0);
    puts("#b1");
    print_array(b1);
    puts("#b2");
    print_array(b2);

    // ジャグ配列
    array<array<int>^>^ c1 = {{1}, {2,3,4}, {5, 6}};
    puts("#c1");
    print_array(c1);

    // 可変引数
    puts("#varargs");
    varargs_func(9, 8, 7, 6, 5, 4, 3, 2, 1, 0);

    return 0;
}

/* 結果
#a0
0 0 0
#a1
1 2 3
#a2
4 5 6
#b0
0 0 0
0 0 0
#b1
1 2 3
4 5 6
#b2
7 0 0
8 9 0
#c1
1
2 3 4
5 6
#varargs
9 8 7 6 5 4 3 2 1 0
 */