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 iteratoradvance_past_empty_inner_containers()中使用此比较。

这是怎么回事?我如何解决它?

最佳答案

这将返回_[](const auto& _) {return _; }的副本。

我没有研究代码,但是如果迭代器对每个取消引用都应用了转换,这完全不会让我感到惊讶,这意味着每次取消引用result.begin()(使用->时),都会得到一个不同的向量。迭代到不同向量的迭代器不能相互比较。

08-15 22:00
查看更多