lol*_*f37 0 c++ iterator vector visual-studio-2010
我有一些代码来删除我的某些元素std::vector:
splitVector.erase(splitVector.begin());
if ( (splitVector.end())->length() == 0 )
splitVector.erase(splitVector.end());
Run Code Online (Sandbox Code Playgroud)
这段代码在MacOs上工作正常,但在Windows上它只是给我这个错误:
表达式:矢量迭代器不可分辨
我不明白为什么这个操作适用于一个操作系统,并在其他操作上给出错误,因为它非常基本.任何人都知道为什么会这样?我还应该继续使用std::vector或移动到其中一个增压容器吗?
谢谢
你需要意识到vector :: end不是向量中的最后一项.这是最后一项之后的一个.如果你尝试取消引用它,那么你的程序就会被窃听.Windows有助于告诉你这一点,MacOS没有帮助.建议您阅读有关如何在标准库中使用容器和迭代器的内容.如果您不了解基础知识,那么转向提升不太可能对您有所帮助.
也许你想要做的就是这个
if ((splitVector.end() - 1)->length() == 0)
splitVector.erase(splitVector.end() - 1);
Run Code Online (Sandbox Code Playgroud)