【发布时间】:2021-07-15 11:58:32
【问题描述】:
我想同时遍历一个带有两个迭代器的地图,一个从开始,一个从结束,如下所示。
map<int, int> m;
for (auto i = m.begin(), j = m.rbegin(); i != m.end(), j != m.rend(); ++i, ++j)
{
}
但出现以下错误。
error C3538: in a declarator-list 'auto' must always deduce to the same type
我还想迭代直到代码 sn-p 的i < j。从地图的开始和结束都只到中间。
【问题讨论】:
-
i<j需要随机访问迭代器,而map没有。 -
可能只是一个错字,但
i != m.end(), j != m.rend()应该是i != m.end() && j != m.rend()。如所写,它相当于j != m.rend()。 -
如果你对这种模式有信心,你可以使用解构
for ( auto [i, j] = make_tuple(m.begin(), m.rbegin()); i != m.end() && j != m.rend(); ++i, ++j)。请注意,i != m.end(), j != m.rend()iteration expression 中的逗号运算符不会按照您的意愿(我认为)。