关于vector创建的二维数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于vector创建的二维数组相关的知识,希望对你有一定的参考价值。

怎样在一个vector创建的二维数组中查找和删除指定的元素啊
我要用vector建一个5×5的矩阵,元素是A~Z除开Q,该怎么做呢

二维数组A[m][n],这是一个m行,n列的二维数组。设a[p][q]为A的第一个元素,即二维数组的行下标从p到m+p,列下标从q到n+q,按“行优先顺序”存储时则元素a[i][j]的地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((i − p) * n + (j − q)) * t
按“列优先顺序”存储时,地址计算为:
LOC(a[i][j]) = LOC(a[p][q]) + ((j − q) * m + (i − p)) * t
存放该数组至少需要的单元数为(m-p+1) * (n-q+1) * t 个字节
二维数组又称为矩阵,行列数相等的矩阵称变方阵。对称矩阵a[i][j] = a[j][i],对角矩阵:n阶方阵主对角线外都是零元素.
转置矩阵
//其中A, B是m*n矩阵:
void tramat(matrix A,matrix B) int i,j;
for(i=0; i<m; i++)
for(j=0;j<n;j++)
B[j]=A[j];


矩阵相加
//其中A,B,C是m*n矩阵:
void addmat(matrix C, matrix A, matrix B)
int i, j;
for(i=0; i<m; i++)
for(j=0;j<n;j++)
c[j] = A[j] + B[j];


矩阵相乘
//其中A是m*n矩阵,B是n*1矩阵,C为m*1矩阵
void mutmat(matrix C, matrix A, matrix B)
int i, j, k;
for(i=0; i<m; i++)
for(j=0; j<i; j++)
C[j]=0;
for(k=0; k<n; k++)
C[j] = C[j] + A[k] * B[k][j];


C++动态二维数组:
以整形为例,row为行数,col为列数
int **data;//存储二维数组的指针(指向指针的指针。date=x[0][0]的地址。这样标会更好。因为sizeof(date)结果为4不可能存下二维数组)
//以下实现如何申请内存
data = new int *[row];
for (int k = 0; k < row; k++)

data[k] = new int[col];

//赋值跟普通二维数组一样 例如
data[0][0] = 5; //将二维数组1行1列(C++中称为0行0列)赋值为5
//删除内存
for (int i = 0 ; i < row; ++i)

delete [] data[i]; //此处的[]不可省略

delete [] data;
参考技术A 用两个for就可以查询了.至于删除,把该数组元素用标记符标志就行了

#include "stdio.h"
main()

int vector[5][5]=3,5,9,1,6;
int x,y;
int find=1;
for(x=0;x<5;x++)
for(y=0;y<5;y++)
if(vector[x][y]==find)
printf("要查找的数字在%d行%d列\n",x+1,y+1);vector[x][y]=0;
参考技术B int a[3][3]=1,2,3,4,5,6,7,8,9;
vector<int> v(a[0],a[3]); //二维数组其实存储也是线性的
vector<int>::iterator it;
int item=5; //假如删除5
for(it=v.begin();it!=v.end();it++)

if(* it==item)
v.erase(it);

copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
return 0;
参考技术C #include <iostream>
#include <vector>
#include <iterator>
using namespace std;

int main()

int a[3][3]=1,2,3,4,5,6,7,8,9;
vector<int> v(a[0],a[3]); //二维数组其实存储也是线性的
vector<int>::iterator it;
int item=5; //假如删除5
for(it=v.begin();it!=v.end();it++)

if(* it==item)
v.erase(it);

copy(v.begin(),v.end(),ostream_iterator<int>(cout," "));
return 0;
本回答被提问者采纳

动态创建二维数组

vector创建二维数组
初始化二维数组
vector<vector <int> > ivec(n ,vector<int>(m));      //n*m的二维vector
vector<vector <int> > ivec(n , vector<int>(m, 0));  //n*m的二维vector,所有元素为0

动态创建m*n的二维
方法一:
vector<vector <int> > ivec;
ivec.resize(n);
for(int i = 0; i < n; i++) ivec[i].resize(m);

方法二:
vector<vector <int> > ivec;
ivec.resize(n, vector<int>(m));


动态创建二维数组a[n][m]
C语言版:
#include<malloc.h>
int **a = (int **)malloc(n *sizeof(int *));
for(int i = 0; i < n; i++)
    a[i] = (int *)malloc(m *sizeof(int));

C++版:
int **a = new int *[n];
for(int i = 0; i < n; i++) a[i] = new int[m];

  

以上是关于关于vector创建的二维数组的主要内容,如果未能解决你的问题,请参考以下文章

动态创建二维数组

c++ 用vector 定义二维数组

如何将二维数组赋值给vector

vector二维数组的问题。

动态创建二维vector数组+指针与引用的区别

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