c++ - 从结构类型列表中删除元素

标签 c++ pointers

这是我的列表声明:list<Message*> g_messages;

哪里Messagestruct .

我想删除列表的某个位置(一条Message)。如果它是一个 vector ,我会这样做:

//delete g_messages[id];

with lists .erase() 必须使用,但我不知道如何。

g_messages.erase(id);不起作用。有人建议使用迭代器,但我如何链接 const int id 和迭代器?

最佳答案

这就是你如何处理列表,你必须遍历所有列表,因为它们是双向链表(每个元素都包含指向上一个和下一个元素的指针)。

// loop through all the elements
for (auto& it = g_messages.begin(); it != g_messages.end(); it++)
{
    if ((*it)->id == input_id)
    {
        delete *it;
        g_messages.erase(it);
        break;
    }
}

另一种选择是使用 <algorithm> 中的 std::find_if它需要一个谓词

auto it = std::find_if(g_messages.begin(), g_messages.end(), [input_id](Message* p){ return (p->id == input_id); });

if (it != g_messages.end())
{
    delete *it;
    g_messages.erase(it);
}

编辑:按照 OP 的要求(删除它相对于开始的位置)

// loop through all the elements
int i = -1;
for (auto& it = g_messages.begin(); it != g_messages.end(); it++)
{
    if (++i == input_position)
    {
        delete *it;
        g_messages.erase(it);
        break;
    }
}

auto it = g_messages.begin();

if (input_position < g_messages.size())
{
    std::advance(it, input_position);
    g_messages.erase(it);
}

关于c++ - 从结构类型列表中删除元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35281417/

相关文章:

c++ - 使用 C++ 使用 “custom” 捕获器创建 WebRTC VideoTrack

c++ - 遇到二维结构数组 C++ 的问题

C++:交换指向的变量

c - 在命令行参数中使用螺旋规则

c++ - 当我尝试将新指针分配给结构时发生堆栈溢出错误

c - 通过使用一系列指针从结构访问字符串

c++ - 是否可以通过消除 >= 比较的需要,将有符号的双关符号输入无符号整数来加快边界检查?

c++ - 轮询默认端点上的 Audio Session 有时会在 Win7 上崩溃

c++ - 多个 shared_ptr 存储相同的指针

C语言: char array issues and warnings by eclipse