今天运行debug版的程序跑了一会就出了vector iterators incompatible这个断言,进断点一看,停在一个vectro容器的insert调用上。
仔细看了这部分的使用代码,很正常,一时半会没找出什么问题。
一开始怀疑使用vector之前做了erase的操作有误,但是确认了iterator已经重新赋值了,没有使用无效的迭代器,这就奇怪了。
出问题的代码类似下面的样子:
vectorA.insert(vectorA.end(), reply->vectorB().begin(), reply->vectorB().end());
stackoverflow上看了看,有人提到这个一般是因为对两个不同容器的iterator做比较等操作导致,但是上面的代码乍看下不会有这个问题啊。
下意识跳转到vectroB函数的定义一看,恍然大悟,原来vectorB()返回的是vector而非vector的引用,所以上面的reply->vectorB()每次调用都生成了一个vector,自然begin和end不是同个vector,从而导致断言了。
这个问题写代码有些大意造成的,所有其他的对vector的返回基本都使用引用,就那个地方漏写了,所以潜意识里,reply->vectorB()返回的肯定是个引用,自然被这个问题的解决给扰乱了一下。
网友评论