如何制作boost :: filesystem :: directory_iterator的副本?

时间:2011-03-21 17:26:45

标签: c++ boost iterator boost-filesystem

我知道这听起来很愚蠢,但请看这个简单的例子(工作目录应该有多个项目):

#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_copyit一起修改! (提升1.45)可能导致这种设计的因素(directory_iterator就像智能ptr一样)?

我只需保存directory_iterator的副本即可在以后使用。

1 个答案:

答案 0 :(得分:6)

如果你看一下reference,你会发现它被宣传为boost::single_pass_traversal_tag

这是STL中Input Iterator的等效(在升级术语中)(将其视为从网络连接传递数据包的迭代器,您无法倒带)。

另请注意(来自同一页):

  

i == j并不意味着++i == ++j

此时,人们可能想知道为什么可以复制它。原因是STL算法通过复制设置了他们的参数。因此,如果无法复制,则无法使用STL算法。