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);
我有一个 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);