weixin_46053407 2020-04-16 20:47 采纳率: 33.3%
浏览 164

C++传递多个Vector参数时会出现问题吗?

C++在传参时,如果传递两个Vector类型的参数时我是写的不对嘛,因为总感觉在我只传一个Vector的时候就不会报错,传了两个的时候,就会报错,不知道什么地方出了问题。试了一个简单的例子:图片说明

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2022-09-20 21:18
    关注
    不知道你这个问题是否已经解决, 如果还没有解决的话:
    • 帮你找了个相似的问题, 你可以看下: 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上的问题