0

私は C++ に非常に慣れていないため、次の作業は必ずしも私が望むほど簡単ではないことを認識していますが、より専門的な意見をいただければ幸いです。

私は基本的に、次のような可変サイズの配列の可変サイズの配列に対して動的な反復を達成しようとしています。

String *2d_array[][] = {{"A1","A2"},{"B1","B2","B3"},{"C1"}};

for (int i=0; i<2d_array.length; i++) {
    for (int j=0; j<2d_array[i].length; j++) {
         print(2d_array[i][j]);
    }
}

これを行う合理的な方法はありますか?おそらく、ベクターまたは別の構造体を使用してですか?

ありがとう :)

4

1 に答える 1

2

C++ 文字列オブジェクトのプレーンな C 配列を使用しています。C には、可変サイズの配列はありません。このコードはとにかくコンパイルされないことに加えて、そのような構成では、コンパイラは宣言された最大長を持つ配列の配列を生成します。サンプルケースでは、

String *2d_array[3][3] 

可変サイズの配列が必要な場合は、ベクトルやリストなどの C++ STL (標準テンプレート ライブラリ) コンテナーを使用する必要があります。

#include <string>
#include <vector>

void f()

{
    typedef std::vector<std::string>   CStringVector;
    typedef std::vector<CStringVector> C2DArrayType;
    C2DArrayType theArray;

    CStringVector tmp;
    tmp.push_back("A1");
    tmp.push_back("A2");
    theArray.push_back(tmp);

    tmp.clear();
    tmp.push_back("B1");
    tmp.push_back("B2");
    tmp.push_back("B3");
    theArray.push_back(tmp);

    tmp.clear();
    tmp.push_back("C1");
    theArray.push_back(tmp);

    for(C2DArrayType::iterator it1 = theArray.begin(); it1 != theArray.end(); it1++)
        for(CStringVector::iterator it2 = it1->begin(); it2 != it1->end(); it2++)
        {
            std::string &s = *it2;
        }
}
于 2010-04-08T09:34:33.000 に答える