1

これは、範囲内の最後のアイテムを逆参照する正しい方法ですか?

std::string getName(Foos::const_iterator& begin, Foos::const_iterator& end)
{
    return boost::apply_visitor(Detail::NameGetterForFoo(),*--end);
}

ベクトルには常に何かがあると仮定します。

4

1 に答える 1

0

コンテナに何かがあることが常に確実な場合は、最後に std::prev を使用してその前のイテレータを取得し、それをデクリメントします。コードブロックの書き方は次のとおりです。

std::string getName(Foos::const_iterator begin, Foos::const_iterator end)
{
    // Assert: begin != end.
    return boost::apply_visitor(Detail::NameGetterForFoo(),*std::prev(end));
}

編集:コンテナも .back() メンバー関数もサポートしています。イテレータ範囲の代わりにコンテナを渡す場合は、代わりにそれを使用できます。このコード ブロックでは、本当に必要なのはコンテナーの最後の要素だけであるように思われるため、これは役立つ場合があります。例えば

std::string getName(Foos const& foos)
{
    // Assume Foos is a standard container with front() and back() and that
    // it is non-empty.
    return boost::apply_visitor(Detail::NameGetterForFoo(), foos.back());
}
于 2013-03-22T13:52:26.073 に答える