c++ - vector::删除()不工作

标签 c++ vector

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/

相关文章:

c++ - 如何处理 win32 winapi 中无效绘制的 ComboBox 控件?

c++ - 搜索 map 和打印 vector

c++ - vector 对而不是 vector <pair>?

c++ - 如何将 TensorFlow Lite 构建为静态库并从单独的 (CMake) 项目链接到它?

c++ - 检查迭代器是否引用列表中的项目

c++ - Eclipse C++ 默认 "Hello World"错误

vector - 无法在新的空向量上设置生命周期

c++ - std::vector 调整大小与 fread 期间的保留

vector - Scheme中的多维向量?

c++通过使用旧 vector 进行预排序来改进 vector 排序