C ++:迭代器-list.begin()引发错误

时间:2018-09-22 13:29:05

标签: c++ list iterator

我正在尝试获取列表的迭代器的索引,我已阅读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

出什么问题了?如何运作?

2 个答案:

答案 0 :(得分:3)

列表容器迭代器不是随机访问迭代器,因此不提供替代。您可以使用std::distance来获取索引。

答案 1 :(得分:3)

v.insert返回一个列表迭代器,该列表迭代器仅满足BiDirectionalIterator。这意味着未为其operator-定义。

要获取距离,可以改用std::distance

int diff = std::distance(v.begin(), iter);