怎么用C++中的Vector来代替 声明 数组中的 2维数组??

怎么用C++中的Vector来声明 一个2维数组?
例如用数组声明:int a[65][65]={0};
或声明: const int b=65 int a[b][b]={0};
以上这2种方式 是用数组 实现声明的。 用vector 该怎么描述呢??

vector里面嵌套vector就可以了。

如下:(x就是有65个vector<int>的相当于2维数组的玩意儿)

#include <vector>
#include <iostream>

using std::vector;
using std::cout;
using std::endl;

int main()
{
vector<vector<int> > x;

for (int i = 0; i < 65; ++i)
{
x.push_back(vector<int>(65));
}

int count = 0;
for (int i = 0; i < x.size(); ++i)
{
for (int j = 0; j < x[i].size(); ++j)
{
cout << x[i][j] << endl;
++count;
}
}

cout << "Count is :" << count << endl;
}

同时请主意,这个和2维数组有个很大的不同就是,它的任意两个一维数组都几乎不是连续存储的。(相信你应该理解2维数组是由很多个连续存储的一维数组构成的)。

举个例子就是在你的二维数组里, a[0][64]和 a[1][0] 在内存里是紧挨的, 我的vector的 x[0][64] 和 x[1][0]就不是。

如:

#include <vector>
#include <iostream>

using std::vector;
using std::cout;
using std::endl;

int main()
{
int a[65][65] = {0};

vector<vector<int> > x;

// 使x成为类似a[65][65]
for (int i = 0; i < 65; ++i)
{
x.push_back(vector<int>(65));
}

cout << "Address of a[0][64]:" << &a[0][64] << endl;
cout << "Address of a[1][0]:" << &a[1][0] << endl;
cout << "Address of x[0][64]:" << &x[0][64] << endl;
cout << "Address of x[1][0]:" << &x[1][0] << endl;
}

参考资料:my smart brain, 同时庆祝我c++问题的采纳率终于突破了50% !!

温馨提示:内容为网友见解,仅供参考
第1个回答  2010-08-17
采用vector嵌套 比如 vector< vector <int> > v
采用这种方法 相当于是动态的二维数组
第2个回答  2015-08-24
定义:
vector<vector <int> > d(1000);

调用:
d[3].push_back(3);
cout<<d[3][0]<<endl;
第3个回答  2010-08-16
vector<vector<e_type>> 即可

如何用vector实现双层数组
vector <vector <int> > array2(3);array2[1][2]=9;我保证你的程序会segement failed,原因就是你没有指定向量的大小。用push_back函数可以解决问题:array2[1].push_back(9);但是好象不太爽。就不能用operator[]吗?答案是肯定的。不过要多加几个步骤,如下:for(int i=0;i ...

C++中vector<int>a,b(n,0)什么意思
首先在程序开头处加上include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std;2.变量声明:2.1 例:声明一个int向量以替代一维的数组:vector <int> a;(等于声明了一个int数组a[],大小没有指定,可以动态的向里面添加删除)。2.2 例:用vector代替二维数组.其实只要声明一个一...

C++ 如何将二维数组转换为vector?
在 C++ 中,可以使用 STL 库中的 vector 来存储二维数组。可以先定义一个空的 vector,然后通过循环来将二维数组的每一行添加到 vector 中。示例代码如下:include <vector> using namespace std;int array[length1][length2];vector<vector<int>> vec;for (int i = 0; i < length1; i++) ...

C++Vector放一个普通二维数组
你可以把数组封装到一个struct或者class里,然后用这个struct或者class当作vector的元素,也可以用vector的vector解决你的问题,总之就是不能直接用数组当作vector的元素

c++中vector和数组中同类型数据是如何互换的?
很简单。vector在内部是连续存储的。如果数组大小相同的话,从vector->数组 你先得到vector[0]的地址,有的Vector实现有data(),也可以,然后用memcpy拷贝size()*sizeof(int)到数组中即可。从数组到vector.利用vector的构造函数或者是assign成员函数构造即可。参数是数组的起始地址和最后一个其地址+_...

c++ 用vector 定义二维数组
“二维”、“多维”数组在初级编程和解算法题时会被提到并流行 真正在实用中是较少用到的。实用中多用的是“装数组的数组”。vector<vector<int>> v;这个就是"二维",可以用v.size()直接得到行数 argv[] 这个也是"二维"。

mfc c++ 初学,vector怎么最简单地使用二维数组vector<int,int> vec...
1.不知道是不是你写错了,正确的二维数组是vector<vector<int> >vect[常量]。2.个人觉得使用typedef表示方法好理解点,直接把vector<vector<int> >看作一个整数,如下:typedef VEC vector<vector<int> >;2.操作:VEC vec[常量]; vec[0].push_bac(1);跟一般类型的二维数组一样去操作。

C++ vector关于二维向量.申明与赋值..
你说的vector<int> vi(10),这种形式的初始化只是适用于顺序初始化容器,而且,虽然它的作用有点像是指定了个数,但是,其实它是初始化了10个为0的物件,vector本身还是容器,不要把它理解为矩阵还是几维几维的东西,用容器如果纯粹是来处理数组做的事情,那就不是使用容器的意义了。所以你说到了...

c++里vector怎么用?
{ vector.push_back(line);} \/\/\/ 个人认为使用vector定义二维数组很好,因为是长度可以不预先确定。很好。(6)C++ Vector排序 vector< int > vi ; vi.push_back(1); vi.push_back(3); vi.push_back(0); sort(vi.begin() , vi.end()); \/\/\/ \/小到大 reverse(vi.begin(),...

C++中的vector如何实现二维?
vector<int> clildrec(*(arrby+i),*(arrby+i)+5);rec.push_back(clildrec);}\/\/这个就完成了2维数组到vector的复制;vector<vector<int> >::iterator iter=rec.begin();vector<int>::iterator clilditer;while(iter!=rec.end()){ clilditer=iter->begin();while(clilditer!=iter->end()...

相似回答