std::list 按索引删除元素

std::list remove element by index

我有一个 std::list 满满的东西。每当我添加一个对象时,我都想将该对象索引存储在列表中,以便稍后我可以将其从列表中删除。

我想用伪代码做什么

myList.pushBack(element);
int index = myList.getIndexOfLastElement();

myList.erase(index);

出于性能原因,我无法按值搜索。

澄清一下: 我有元素 a(索引 0)、b(索引 1)、c(索引 2)、d(索引 3)

如果我删除元素b,我仍然希望能够通过2访问c。

您需要 map index 到该元素的迭代器。类似于:

auto pos = myList.cbegin();
map<int, decltype(pos)> m;

// bump pos for every myList.pushBack(element);
int index = myList.getIndexOfLastElement();
m[index] = pos;

// then you can erase with
myList.erase(m[index]);

我建议使用 std::list::iterator 而不是整数索引。 std::list::erase() 不会使迭代器无效。

auto index = myList.insert(myList.end(), element);

myList.erase(index);