记录自己的QT学习之路(6)

对二维Vector使用的一些经验与总结:
我创建了一个新的类myShape,被Line、Rect、Circle、Ellipse、Arc、Point六个子类所继承
希望申明一个二维vector,里面存放这六个类并加以分组
申明语句QVector<QVector<myShape*>> vmyshape;
遍历语句:

for (int i = 0; i < vmyshape.size() ; i++)
  {
    for (int j = 0; j < vmyshape[i].size(); j++)
     {
       vmyshape[i][j]->drawShape(&pen, &g);
     }
  }

通过但会报错在这里插入图片描述
“index out of range”数组溢出(下标越界)
原因是我们事先没有为Qvector分配空间,而直接采用了数组下标的方式访问了QVector(即QVector[n]的形式),会报访问超界的错。

解决办法1:使用迭代器访问Vector

 QVector<QVector<myShape*>>::iterator iter;
 QVector<myShape*>::iterator it;
 QVector<myShape*> i;
 for (iter = vmyshape.begin(); iter != vmyshape.end(); iter++)
 	{
  	i = *iter;
  	for (it = i.begin(); it != i.end(); it++)
  		{
 		 *it->drawShape(&pen, &g);
 		 }
 }

解决方法2:先事先声明vector的大小再用数组下标的方式访问

QVector<myShape*> vmyshape[6];
***
for (int i = 0; i < 6 ; i++)
 {
  for (int j = 0; j < vmyshape[i].size(); j++)
  {
   vmyshape[i][j]->drawShape(&pen, &g);
  }
  
 }

我采用的是第二种,使用第一种方法的时候会报错,至今不知道原因,我怀疑可能是我vector里存放的是对象,而用迭代器访问的时候只能访问到对象但不能直接使用对象的方法,如有大神发现请告知。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值