簡體   English   中英

boost boost()后比較嵌套迭代器

[英]compare nested iterators after boost transformed()

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運行此w / VS2015, _ITERATOR_DEBUG_LEVEL=2_Compat(const _Myiter& _Right)觸發此錯誤:

        _DEBUG_ERROR("vector iterators incompatible");

這很重要,因為Flattening迭代器advance_past_empty_inner_containers()使用此比較。

這是怎么回事? 我如何解決它?

這將返回_[](const auto& _) {return _; } [](const auto& _) {return _; }

我沒有查看代碼,但是如果迭代器在每個解除引用上應用轉換,那么我就不會感到驚訝,這意味着每次取消引用result.begin() (使用-> )時,您都會獲得不同的副本矢量。 迭代器分成不同的向量是不可比的。

無論這個代碼試圖比較地址的行為如何,我都想初始化一個迭代器vector<vector<int>>::iterator來簡化比較存儲在第一個子集中的第一個和最后一個值的過程,最后一個應該是使用->rbegin()->end()-1來代替->end() ,它會帶來未分配的內存跨度。

讓我重新填充你的數組, vector<vector<int>> input{ { { 1, 2 },{ 3, 1 } } };

你要么做其中一個:

assert(*(result.begin()->begin()) == *(result.begin()->end() - 1));
assert(*(result.begin()->begin()) == *(result.begin()->rbegin()));

兩者都拋出異常,因為1 = / = 2

嘗試這個:

assert(*(result.begin()->begin()) == *((result.end() - 1)->end() - 1));

它沒有,因為最重要的是等於forelast存儲的整數。

如果有其他事情沒有在這里談到或者沒有清楚地理解,請告訴我。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM