C++在传参时,如果传递两个Vector类型的参数时我是写的不对嘛,因为总感觉在我只传一个Vector的时候就不会报错,传了两个的时候,就会报错,不知道什么地方出了问题。试了一个简单的例子:
1条回答 默认 最新
关注 不知道你这个问题是否已经解决, 如果还没有解决的话:- 帮你找了个相似的问题, 你可以看下: https://ask.csdn.net/questions/1064032
- 你也可以参考下这篇文章:C++中vector的使用:输出问题
- 除此之外, 这篇博客: vector的讲解及模拟实现(c++)中的 2.对于vector可能会导致其迭代器失效的操作有 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
①. 会引起其底层空间改变的操作, 都有可能是迭代器失效, 比如: resize、reserve、insert、assign、push_back等.
出错原因:
以上操作, 都有可能会导致vector扩容, 也就是说vector底层原来旧空间被释放掉, 而在打印时, it还使用的是释放之间的旧空间, 在对it迭代器操作时, 实际操作的是一块已经被释放的空间, 而引起代码运行时崩溃.
②. 指定位置元素的删除操作--erase.
出错原因:
erase删除pos位置元素后, pos位置之后的元素会往前搬移, 没有导致底层空间的改变, 理论上讲迭代器不应该会失效, 但是: 如果pos刚好是最后一个元素, 删完之后pos刚好是end的位置, 而end位置是没有元素的, 那么pos就失效了. 因此删除vector中任意位置上元素时, vs就认为该位置迭代器失效了.(vector的删除操作不光会导致指向被删除元素的迭代器失效,删除元素后面的迭代器也会失效)
③. 当我们使用swap时也有可能会导致迭代器失效.
出错原因:
当我们创建两个vector对象时, 分别创建两个对象的begin()迭代器it_1,it_2, 我们使用swap对两个对象进行交换,交换完之后,it_1指向第二个对象, it_2指向第一个对象,这时如果你再使用it_1去操作第一个对象或者使用it_2去操作第二个对象就会发生错误.
迭代器失效的解决办法?
在使用前, 对迭代器重新赋值即可.
如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^解决 无用评论 打赏 举报
悬赏问题
- ¥20 cad图纸,chx-3六轴码垛机器人
- ¥15 移动摄像头专网需要解vlan
- ¥15 对于这个问题的算法代码
- ¥20 access多表提取相同字段数据并合并
- ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
- ¥20 Java-Oj-桌布的计算
- ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
- ¥20 有人知道这种图怎么画吗?
- ¥15 pyqt6如何引用qrc文件加载里面的的资源
- ¥15 安卓JNI项目使用lua上的问题