読者です 読者をやめる 読者になる 読者になる

RangeEx equalを試す

C++

以下、Boost 1.43.0 beta1で検証しています。


まず、要素数が同じRange同士の比較

#include <cassert>
#include <vector>
#include <list>
#include <boost/range/algorithm/equal.hpp>

int main()
{
    const std::vector<int> v = {1, 2, 3};
    const std::list<int>  ls = {1, 2, 3};

    assert(boost::equal(v, ls)); // OK
}


次に、要素数が異なるRange同士の比較。
std::equalにそのまま流してるだけだと問題。

#include <cassert>
#include <vector>
#include <list>
#include <boost/range/algorithm/equal.hpp>

int main()
{
    const std::vector<int> v = {1, 2, 3};
    const std::list<int>  ls = {1, 2, 3, 4};

    assert(!boost::equal(v, ls)); // OK
}

大丈夫そう。


いちおう実装もみてますが、なんであんなめんどくさいことしてるのか。
(std/boost)::distanceとstd::equalを使って実装すれば一瞬でできるのに、わざわざタグディスパッチしてwhile文を使ったりして実装されています。
Boost 1.42.0までは<boost/detail/algorithm.hpp>に、equal等のRangeアルゴリズムのシンプルな実装があったのですが、Boost 1.43.0 beta1では<boost/range/algorithm/equal.hpp>で置き換えられていました。