JAVA中Vector怎样存放一个动态的二维数组

JAVA中Vector怎样存放一个动态的二维数组,第1张

第一维的用一个个插进去,第二维同样可以一个个插进去,用push_back。 如果你已经知道大小的话,最好用reserve先申请一下空间,不然运行效率会很低的。 size是返回vector中元素的个数。

假设a,b为两个int型变量,如果希望这样生成一个二维数组:new int[a]<b>,是不会得到编译器允许的——因为没有指定这个数组的元素类型。

由于b的大小未知,编译器无法确定‘int<b>’到底是一个什么类型。所以,要用new创建一个二维数组。

方法一:使用常量

接上:如果将b指定为一个常量,例如new int[a][5],其实质与new int[a]创建一个动态数组并无多大区别——只是元素类型由int变为了'int[5]'而已。

示例代码:

void TestFunc_(unsigned int n)

{

unsigned int i,j;

//元素类型为‘int[5]’的数组,可赋值给‘int[5]’类型的指针

int(array2D)[5]=new int[n][5];

for(i=0;i<n;++i)

{

for(j=0;j<5;++j)

{

array2D<i>[j]=i5+j;

}

}

//回收方法和普通动态数组相同,使用'delete[]'即可

delete[]array2D;

}

用这个方法来创建二维数组,比较直观、易用,但它最大的限制在于:你必须在编译时确定b的大小。

方法二:使用指针间接引用

首先创建若干个大小一致的动态数组,然后将这些数组的首地址(转化为指针)按顺序存储到一个动态数组中,就相当于模拟了一个二维动态数组。

示例代码:

void TestFunc_pointer(unsigned int height,unsigned int width)

{

unsigned int i,j;

//数组的元素类型为‘int’,可赋值给指向‘int’的指针

intarray2D=new int[height];

for(i=0;i<height;++i)

{

array2D<i>=new int[width];

}

//访问

for(i=0;i<height;++i)

{

for(j=0;j<width;++j)

{

//内存非连续,注意防止越界

array2D<i>[j]=iwidth+j;

}

}

//首先回收低一级的动态数组

for(i=0;i<height;++i)

{

delete[]array2D<i>;

}

//然后回收高一级的动态数组

delete[]array2D;

}

方法三:使用vector

借助STL中的vector,我们可以很直观的创建一个二维数组,而不需要用到基本数组的概念。

示例代码:

void TestFunc_vector(unsigned int height,unsigned int width)

{

typedef std::vector<int>IntVector;

typedef std::vector<IntVector>IntVector2D;

unsigned int i,j;

IntVector2DpArray2D=new IntVector2D;

//动态设置大小

pArray2D->resize(height);

for(i=0;i<height;++i)

{

(pArray2D)<i>resize(width);

}

for(i=0;i<height;++i)

{

for(j=0;j<width;++j)

{

(pArray2D)<i>[j]=iwidth+j;

}

}

delete pArray2D;

}

第一维的用一个个插进去,第二维同样可以一个个插进去,用push_back。
如果你已经知道大小的话,最好用reserve先申请一下空间,不然运行效率会很低的。
size是返回vector中元素的个数。

int main()
{
 vector < vector<int> > a; // a是向量类型的向量
    vector <int> v1; // v1是int类型的向量
    int i,j,m;
    for(i=0;i<=3;i++) // a有4个元素
    {
        apush_back(v1);// 每个元素是v1
    }
    for(j=0;j<=3;j++)
    {
        for(i=0;i<=3;i++)
        {
            cin>>m;
            a[i]push_back(m); // a的第i个元素插入一个量 
                               // 就是每个v1插入一个量 
                               // a[0]插入,a[1]插入,a[2]插入,a[3]插入
                               // 如此循环四次,相当于按列的顺序插入 
 
        }
    }
    cout<<"Size:"<<asize()<<endl;
    for(i=0;i<=3;i++)
    {
        for(j=0;j<=3;j++)
        {
            cout<<a[i][j]<<" "; // 输出a[0][0],a[0][1]a[0][2],a[0][3]
                                // 输出a[1][0],a[1][1]a[1][2],a[1][3]
                                // 如此第一个索引值循环4次,相当于按行的顺序输出 
        }
        cout<<endl; // 输出一行就换行
    }
    return 0;
}

vector<int> line;
vector< vector<int> > array;
for(int i = 0; i < m; i++)
{
for(int j = 0; j < n; j++)
linepush_back(i + j);
arraypush_back(line);
lineerase(linebegin(), lineend());
}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://www.outofmemory.cn/yw/13410380.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-30
下一篇 2023-07-30

发表评论

登录后才能评论

评论列表(0条)

保存