有什么方法可以检查迭代器(无论是来自 vector ,列表,双端队列...)是否(仍然)可取消引用,即尚未失效?

我一直在使用try-catch,但是有更直接的方法吗?

示例:(不起作用)

list<int> l;
for (i = 1; i<10; i++) {
    l.push_back(i * 10);
}

itd = l.begin();
itd++;
if (something) {
    l.erase(itd);
}

/* now, in other place.. check if itd points to somewhere meaningful */
if (itd != l.end())
{
    //  blablabla
}

最佳答案

我假设您的意思是“是一个有效的迭代器”,由于容器的更改(例如,向 vector 插入/从 vector 中擦除),它尚未失效。在那种情况下,不能,您无法确定迭代器是否(可以安全地)取消引用。

10-08 17:27