-4

OOP を使用して 2D ベクトルを渡すことについて混乱しています

例えば:

class ABC
{
public:
    void function() 
    {
     vector<vector<string>> high;
     for ( int i=0; i<100; i++ )
     {
         high[0].push_back(i);
     }
    }
};

int main() {};

関数では、いくつかの計算を行い、結果は 2D 配列 (高) に格納されます。メイン関数に渡すには 2 次元配列全体が必要ですが、どうすればよいですか?

私はこれを試しました、

class ABC{
public:
    vector<vector<string>> function ()
    {
    vector<vector<string>> high;
    for ( int i=0; i<100; i++ )
    {
    high[0].push_back(i);
    }
    }
};
int main()
{
ABC abc;
abc.function();
};

しかし、それは完全な失敗のようです。

ありがとう

4

2 に答える 2

0
for(int i = 0; i < 100; i++)
   for(int j = 0; j < 100; j++)
    //high[i].[j]
    //high.at(i).at(j)

なんかこう思う。

于 2013-04-01T07:31:06.047 に答える
0

次のような関数から配列を返す必要があります。

vector<vector<string>> function ()
{
    vector<vector<string>> high;
    high.resize(1);   // <-- note this resize, because you are using high[0] 
                      //     element later
    for ( int i=0; i<100; i++ )
    {
        high[0].push_back("some data...");
    }
    return high;      // <-- note this return statement
}

functionから呼び出してmain、次のようにデータを取得します。

vector<vector<string>> data = function();

他の、より効率的な解決策は、配列を作成しmain、非 const 参照で渡すことfunctionです。

class ABC{
public:
void function (vector<vector<string>>& high)
{
    high.resize(1);
    for ( int i=0; i<100; i++ )
    {
        high[0].push_back("some data...");
    }
}
};

int main()
{
    ABC abc;
    vector<vector<string>> high;
    abc.function(high);
};

また、ベクターにアクセスしたい要素が含まれていることを確認してください。たとえば、high[0]最初のベクトル要素にアクセスします。resizeサイズ変更に使用します。push_back自動的にサイズが大きくなることに注意してください。

于 2013-04-01T07:43:26.537 に答える