vector<vector<int>> input{ { { 1, 2 },{ 3, 4 } } };
auto result = input | boost::adaptors::transformed([](const auto& _) {return _; });
result.begin()->begin() == result.begin()->end();
如果我使用
_ITERATOR_DEBUG_LEVEL=2
使用VS2015运行此命令,则会在_Compat(const _Myiter& _Right)
中引发此错误: _DEBUG_ERROR("vector iterators incompatible");
这很重要,因为Flattening iterator在
advance_past_empty_inner_containers()
中使用此比较。这是怎么回事?我如何解决它?
最佳答案
这将返回_
:[](const auto& _) {return _; }
的副本。
我没有研究代码,但是如果迭代器对每个取消引用都应用了转换,这完全不会让我感到惊讶,这意味着每次取消引用result.begin()
(使用->
时),都会得到一个不同的向量。迭代到不同向量的迭代器不能相互比较。