0

私は最近ベクトルを使用していますが、通常の配列宣言と比較すると非常に便利であることがわかりました。ただし、次のように1D操作のみを処理しました:-

      vector<int>X;
      X.push_back(value/variable);

同等の 2D ベクトルに対して同様の操作を実行し、行ごとに値を動的に更新するにはどうすればよいですか? ここで私を助けてください。質問が初歩的な場合はお詫び申し上げます。また、ベクトルのすべての操作がチュートリアルとして提供されているリンクを表示できると、非常に役立ちます。私はいくつかのサイトを試しましたが、それらはいたるところにあります。私を助けてください。

4

2 に答える 2

3

One more way to work with 2D-arrays is the using of one vector with 2D-addressing in your own class.

Here an example:

#include <iostream>
#include <vector>

class array_2d
{
    public:
        array_2d( 
            unsigned int x, 
            unsigned int y ) 
        : 
            m_size_x( x ), 
            m_size_y( y ),
            // resize vector to size x*y, all elements are 0.
            m_data( x*y, 0 )
        {}

        int
        get( unsigned int x, unsigned int y ) const
        {
            return m_data[ x + y * m_size_y ];
        }

        void
        set( unsigned int x, unsigned int y, int data )
        {
            m_data[ x + y * m_size_y ] = data;
        }

    private:
        unsigned int m_size_x;
        unsigned int m_size_y;

        std::vector <int> m_data;
};

int main()
{
    // 2D array 2x3.
    array_2d m( 2, 3 );

    // Set 2 cells into 1 and 3.
    m.set( 1, 1, 1 );
    m.set( 2, 0, 3 );

    for( unsigned int i = 0; i < 3; ++i )
    {
        for( unsigned int j = 0; j < 2; ++j )
            std::cout << m.get( i, j ) << " ";

        std::cout << std::endl;
    }
    return 0;
}
于 2013-06-06T23:15:27.177 に答える