使用矢量的2D阵列操作

时间:2013-06-06 22:39:12

标签: c++ vector multidimensional-array

我最近一直在使用向量,并且在比较正常的数组声明时发现它们非常方便。但是,我只处理了以下一维操作: -

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

如何对2D矢量等效执行类似操作并逐行动态更新值?如果问题很简陋,请在这里帮助我,并向我道歉。如果您可以向我显示一个链接,其中向量的所有操作都作为教程提供,那将非常有用。我试过很少的网站,但它们都是比特。请帮帮我。

2 个答案:

答案 0 :(得分:3)

使用2D数组的另一种方法是在自己的类中使用一个带有2D寻址的向量。

这是一个例子:

#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;
}

答案 1 :(得分:1)

你需要vector <vector <int> >的内容,内部向量代表一个完整的行。或者是一个完整的列(只需选择一行主要或一个主要列并坚持使用它)。 或者,只需使用boost :: multi_array(http://www.boost.org/doc/libs/1_53_0/libs/multi_array/doc/user.html

以下是一个例子:

//#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;

int main(){

vector <vector <int> > my2d;

vector<int> row;

row.push_back(1); row.push_back(2); row.push_back(3);

my2d.push_back(row);

++row[1];

my2d.push_back(row);

--row[0];

my2d.push_back(row);

for(size_t r=0;r<my2d.size();r++)
{
    for(size_t c=0;c<my2d[0].size();c++)
    {
        printf("%d ",my2d[r][c]);
    }
    printf("\n");
}

getchar();

return 0;
}