vector< vector<int> > //一定要有空格,否则认为移位运算符。
vector<vector<int> > array(3) ,申请保存3个向量的vector,array[i]返回的是第i个向量,同理array[i][j]返回的是第i个向量的第j个元素。
问题到这里,你可能会得意的说:"我明白了,很简单吗!"。别急,还有一些细节问题:如下
vector< vector<int> > array2(3);
array2[1][2] = 9;
我保证你的程序会segement failed,原因就是你没有指定向量的大小,用push_back可以解决这个问array2[1].push_back(9);但是好象不太爽。就不能用operator[]吗?答案是肯定的。不过要多加几个步骤,如下:
for (int i=0; i < 3; i++)
array[i].resize(3);
这样,你就定义了一个3X3的数组了(另一个3在 申明时定义的)。而且你可以随时改变它的大小。
#include <iostream>
#include <vector>
using namespace std;
void main()
{
vector< vector<int> > array(3);
for (int i = 0; i < 3; i++)
array[i].resize(3); //设置数组的大小3X3
//现在你可以和使用数组一样使用这个vector
for (i=0; i < 3;i++)
for (int j=0; j<3; j++)
array[i][j]=(i*j);
//增加一句 printf("%d",j);,会出现 j; ' : undeclared identifier
//输出
for ( i=0; i < 3; i++)
{
for(int j=0;j<3;j++) //为什么要加int 否则出现 j; ' : undeclared identifier
cout << array[i][j] << "";
cout<<endl;
}
array.resize(5);
array[3].resize(3);
array[4].resize(3);
//现在是5X3的数组了
for ( i=0; i < 5; i++)
for (int j=0; j < 3; j++)
array[i][j] = (i*j);
for ( i=0; i<5; i++)
{
for (int j=0; j<3; j++)
cout<<array[i][j]<<"";
cout<<endl;
}
}
我是在VC6编译的这个程序,错误也是基于VC6.0的。注意这个程序i,j 的作用域问题,第一次定义i时,i的作用域相当于是整个函数,第一次定义j时,j包含在外层的第一次定义i的for内,作用域只是在i的for循环内。是局部变量.
for的作用域在VC6.0和VS2010是不同的,具体看下一篇文章。