RemoveContact_HI 创建了这个函数来删除 vector 中的元素:
void JNP::IPComm_HostType::RemoveContact_H( UINT contactIndex,std::vector<IPContact>& l )
{
assert( contactIndex < l.size() );
l.erase( l.begin() + contactIndex );
}
然而它似乎并没有起作用。当我调用该函数时,该元素不会被删除。 vector的大小减少了1,但是你仍然可以通过编码访问所有的元素包括被删除的元素
hostList[some integer]
即如果 hostList 有 2 个元素,我要调用
RemoveContact_H( 0, hostList )
大小将减少到 1,但两个元素仍会存在并可以访问!
编辑
毫不奇怪,错误是由于我的编码而不是 vector::erase() 函数引起的。我之前为 IPContact 类定义了等号运算符,它实际上没有复制任何数据。
最佳答案
是Undefined behavior访问已经从 vector 中删除的元素。有时它会工作(你的情况)但它会在最糟糕的时刻崩溃(即在演示期间,或在你的家人面前;))。
但是如果你使用 std::vector::at
要访问已删除的元素,它将抛出 std::out_of_range
异常。
std::vector::operator[]
不执行边界检查。
the size would be reduced to 1, but both elements would still exits and could be accessed!
正如我之前所说,它是未定义的行为,您不应该尝试访问已删除的元素。尝试用 vector::at
来做,它会抛出异常。
关于c++ - vector::删除()不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18610496/