我有这段代码可以删除std::vector中的某些元素:

splitVector.erase(splitVector.begin());
if ( (splitVector.end())->length() == 0 )
    splitVector.erase(splitVector.end());


这段代码在MacO上运行良好,但在Windows上却给了我这个错误:


  表达式:不可迭代的矢量迭代器


我不明白为什么这个操作只能在一个操作系统上运行,而在其他操作系统上却会出错,因为它很基本。
有人知道为什么会这样吗?
还应该继续使用std::vector或移至boost容器之一吗?

谢谢

最佳答案

您需要认识到vector :: end不是向量中的最后一项。这是最后一项过去了。如果您尝试取消引用它,则您的程序存在错误。 Windows会告诉您有关信息,而MacOS则没有帮助。建议您阅读有关如何在标准库中使用容器和迭代器的内容。如果您不了解基本知识,那么提高自己的能力不太可能对您有帮助。

也许你想做的就是这个

if ((splitVector.end() - 1)->length() == 0)
  splitVector.erase(splitVector.end() - 1);

10-04 11:32