【发布时间】:2014-07-06 21:02:45
【问题描述】:
我有一个 C++ 向量,其中有一些空白元素。我想从向量中删除任何空字符串元素。我试过这段代码:
for (i = 0; i < myvector.size();i++) {
if (myvector[i] == "") {
myvector.erase(myvector.begin()+i);
}
}
当我运行此代码时,我遇到了分段错误。有什么问题吗?或者这段代码对你们中的任何人都有效吗?
【问题讨论】:
-
你真正的逻辑问题当然是你不应该增加
i。 -
这段代码中没有任何东西会突然导致段错误。 (当然它并没有真正擦除所有的空项目)。您的程序中一定还有其他问题(例如,较早的堆损坏,或者向量中的对象没有正确的值符号)。
-
一旦 STL 的 uniform container erasure 成为标准,我们就可以说
std::erase_each_if(myvector, std::mem_fn(&std::string::empty));... -
@KerrekSB,酷,不知道这是一回事。我已经有了它的功能,但仍然。
-
@chris:当然,everyone 已经有了这个功能——这就是为什么它被考虑标准化的原因 ;-)
标签: c++ vector segmentation-fault