如何解决在C ++中擦除插入惯用语?
以下代码可以正常工作:
auto it = vec.insert(vec.begin(),vec.begin(),vec.begin()+i);
vec.erase(it+i,vec.end());
但这会导致malloc: corrupted top size
错误:
vec.erase(vec.insert(vec.begin(),vec.begin()+i)+i,vec.end());
为什么会发生这种情况,有什么办法可以解决此错误?
主要问题是,当两个函数都在同一向量上操作时,我可以将insert()的结果传递给delete()吗?
解决方法
在将
vec.end
作为erase
的参数进行评估之后,由于插入而可能会更改。 C ++不保证参数从左到右求值。
这里没有简单的解决方法。您需要erase
的迭代器范围,但是insert
会更改vector
的迭代器。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。