vector subscript out of range

来源:互联网 发布:什么是java泛型 编辑:程序博客网 时间:2024/04/27 20:46

当初写日志,只是为了记录一下自己所做的事情,没想到会有别人来看。所以没有任何的解释,只是胡乱写了些东西。


其实问题很简单,题目已经说明一切,错误就是越界,仔细检查代码,找出什么地方可能会越界就行了


昨天运行程序时,突然出现了如题所述的错误。错误很明显,vector的下标越界了,但是之前一直没有什么问题啊,于是我仔细读代码,debug,然后拿出前天能运行的程序,依然会出现这个错误。

开始时不甘心,一直想着昨天之前都能运行,错误应该出在昨天的代码里面。

于是找啊找,找了一天终于还是没有找到。

今天继续找,不过今天已经不找昨天写的代码了,开始看看里面调用的之前的函数,结果很短时间就找出来了,一个很低级的手误。。。

 

总结:不能太相信自己,适当相信这些“标准”,毕竟是这么多人总结出来,被更多的人用,提示这个错误就先找找这种错误

要更加仔细

要学会debug,写完代码多运行几遍

 

另外,明白了vector里面的at & [],源码如下:


 

The difference between this member function and member operator function operator[] is that vector::at signals if the requested position is out of range by throwing an out_of_range exception. 
operator [] signals only if _HAS_ITERATOR_DEBUGGING.虽然不是太明白,但是应该是at()会检查越界,而[]除了在这种debug时,是不会查越界的。所以我以后还是用.at()吧。不过 这样会降低效率,还是[]在实际中应该会好些。一是简单可读,二是只在调试的时候查越界,调试完使用时不检查,节约时间。
不过好像c++ 0x会两个都检查了。不清楚,等待新标准
原创粉丝点击