我有这段代码可以删除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);