2011-03-21 77 views
5

我知道這聽起來很愚蠢,但看看這個簡單的例子(工作目錄應該有一個以上的項目):如何使升壓副本::文件系統:: directory_iterator?

#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副本以後使用它。

回答

6

如果你看看reference你會發現它被廣告爲boost::single_pass_traversal_tag

這是STL中的Input Iterator的等效(在boost術語中)(將其視爲從網絡連接傳遞數據包的迭代器,不能倒回)。

還要注意(從同一頁):

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

在這一點上,人們可能會問爲什麼它可以被複制。其原因是,STL算法設置了規範的複製考慮他們的論點。因此,它不會與STL算法使用的,如果它不能被複制。