我正在尝试获取列表的迭代器的索引,我已阅读this stackoverflow question并尝试了以下代码:
std::list<int> v;
std::list<int>::iterator iter = v.insert(v.begin(), 1);
int i = iter - v.begin();
令人惊讶的是,它不起作用,我遇到了一个错误。
error: invalid operands to binary expression
出什么问题了?如何运作?
答案 0 :(得分:3)
列表容器迭代器不是随机访问迭代器,因此不提供替代。您可以使用std::distance
来获取索引。
答案 1 :(得分:3)
v.insert
返回一个列表迭代器,该列表迭代器仅满足BiDirectionalIterator。这意味着未为其operator-
定义。
要获取距离,可以改用std::distance
:
int diff = std::distance(v.begin(), iter);