c++二维vector数组赋值的问题

c++二维vector数组赋值的问题

问题描述:

建了一个二维数组(19*19):
图片说明

初始化:
图片说明

然后根据条件改值:
图片说明
赋值语句a[i] [j].safe=1;赋值成功,但是后面四行
a[i+1] f[j+1]a.safe=1;
a[i+1][j-1].safe=1;
a[i-1][j+1].safe=1;
a[i-1][j-1].safe=1;
却无法赋值(没有越界),这是为什么呢,有什么解决办法吗?
我是通过vs2010调试观察里面的值来看出后四行没有成功赋值的

没有问题,下标没有越界。 码字不易,为下载资源,求给分。
直接把表格打出来就知道了。

初始状态
图片说明

i=1,j=2 对应5个位置是有赋值的
图片说明

i=17,j=17
图片说明

a在哪里定义的,有没有19x19,哪里有vector,safe是什么类型

这个情况应该是因为越界造成的;
检查你的数组在定义时的长度
赋值的时候有没有越界。

越界了,for循环,j = 17 的时候满足 j <18 ;j自增1为 18,18+1 = 19,导致数组越界了

你怎么知道没有改动呢?我看是改了的呀,你看position为0的元素的左上,左下,右上,右下四个元素都应该safe是1,难道不是吗?

你a虽然初始化了,但是a里面的元素没有初始化
需要
for (int i = 0; i < 19; i++)
for (int j = 0; j < 19; j++)
{
loc l;
a[i][j] = l;
}
也可以用push_back

应该先临界点,0和18的情况,中间的位置和是这样的赋值

vector初始化
一维:vector array(4,0) //有四个0
二维:vector >array(4,vector(4,0)) //有16个0,其中二维两个右尖括号中的空格在c++11以前需要打上