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

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

不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 帮你找了个相似的问题, 你可以看下: 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去操作第二个对象就会发生错误.

    迭代器失效的解决办法?

    在使用前, 对迭代器重新赋值即可.


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^