質問

私はこれが愚かに聞こえることを知っていますが、この簡単な例を見てください(作業監督には複数のアイテムがあるはずです):

#define BOOST_FILESYSTEM_VERSION 3
#include <boost/filesystem.hpp>
#include <cassert>

int main()
{
    using namespace boost::filesystem;
    directory_iterator it("./");
    directory_iterator it_copy = it;
    ++it;
    assert(it_copy != it);
    return 0;
}

it_copy 一緒に変更されます it! (ブースト1.45)そのようなデザインにつながる可能性のある考慮事項(directory_iterator スマートPTRのようなものです)?

コピーを保存する必要があります directory_iterator 後で使用します。

役に立ちましたか?

解決

を見てみると 参照 あなたはそれが宣伝されていることに気付くでしょう boost::single_pass_traversal_tag.

これは(ブースト用語で)に相当するものです 入力イテレータ STLでは、ネットワーク接続からパケットを配信するイテレーターと考えてください。巻き戻すことはできません)。

また、注意してください(この同じページから):

i == j それを意味しません ++i == ++j.

この時点で、なぜコピーできるのか疑問に思うかもしれません。その理由は、STLアルゴリズムがコピーで議論を行う標準を設定したためです。したがって、STLアルゴリズムをコピーできない場合、STLアルゴリズムでは使用できません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top