-5

抱歉,我无法提供代码,因为我没有。

我的同事(他在公司工作了很长时间,但似乎不知道他在做什么)声称他必须做一些奇怪的事情才能从向量中删除元素。他将所有元素向下移动一个位置(从他想要删除的元素开始),然后他将删除向量中的最后一个元素。这听起来不错,但效率很低。标准库的 std::vector::erase() 应该能够很好地处理这个问题。

他这样做是因为他声称对元素 0 调用擦除会产生随机异常。

我的问题是什么可能导致这种情况?我很确定这是一个线程安全问题,但还有其他可能导致它的原因吗?

请让我知道...我是 C++ 新手。

再次抱歉无法提供代码。

谢谢,杰布

4

4 回答 4

5

...在元素 0 上调用擦除会产生随机异常。

不,它没有。

这就是你可以期待的所有答案,而不需要更多关于他实际在做什么的信息。

于 2010-09-24T17:26:06.453 回答
2

erase调用元素 0 会引发异常的唯一地方是已经调用了未定义行为的情况。最常见的是,尝试从空向量中擦除元素零。

这听起来不错,但效率很低。

不是真的 - 这就是erase正在做的事情。但是重新实现标准库已经为你做的事情是没有意义的。

于 2010-09-24T17:26:26.673 回答
1

没有代码很难说。如果vector::size()> 0,则擦除元素 0 是完全有效的。可能是他正在使用迭代器来擦除第 0 个元素,并且迭代器已经以某种方式失效。

于 2010-09-24T17:26:28.347 回答
0

根据您对同事逻辑的描述,我会说您的评估是准确的。'随机异常' = '由于滥用向量容器而导致的未诊断错误'。

也就是说,这个问题有点毫无意义——如果你不能提供来源,你怎么能得到一个关于哪里出了问题或其他问题的明确答案?

于 2010-09-24T17:27:39.263 回答