[fs.path.itr] # 31 Input/output library [[input.output]](./#input.output) ## 31.12 File systems [[filesystems]](filesystems#fs.path.itr) ### 31.12.6 Class path [[fs.class.path]](fs.class.path#fs.path.itr) #### 31.12.6.6 Iterators [fs.path.itr] [1](#1) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15281) Path iterators iterate over the elements of the pathname in the [generic format](fs.path.generic "31.12.6.2 Generic pathname format [fs.path.generic]")[.](#1.sentence-1) [2](#2) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15285) A path​::​iterator is a constant iterator meeting all the requirements of a [bidirectional iterator](bidirectional.iterators "24.3.5.6 Bidirectional iterators [bidirectional.iterators]") except that, for dereferenceable iterators a and b of type path​::​iterator with a == b, there is no requirement that *a and *b are bound to the same object[.](#2.sentence-1) Its value_type is path[.](#2.sentence-2) [3](#3) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15296) Calling any non-const member function of a path object invalidates all iterators referring to elements of that object[.](#3.sentence-1) [4](#4) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15300) For the elements of the pathname in the generic format, the forward traversal order is as follows: - [(4.1)](#4.1) The [*root-name*](fs.path.generic#nt:root-name "31.12.6.2 Generic pathname format [fs.path.generic]") element, if present[.](#4.1.sentence-1) - [(4.2)](#4.2) The [*root-directory*](fs.path.generic#nt:root-directory "31.12.6.2 Generic pathname format [fs.path.generic]") element, if present[.](#4.2.sentence-1) [*Note [1](#note-1)*: It is possible that the use of the generic format is needed to ensure correct lexicographical comparison[.](#4.2.sentence-2) — *end note*] - [(4.3)](#4.3) Each successive [*filename*](fs.path.generic#nt:filename "31.12.6.2 Generic pathname format [fs.path.generic]") element, if present[.](#4.3.sentence-1) - [(4.4)](#4.4) An empty element, if a trailing non-root [*directory-separator*](fs.path.generic#nt:directory-separator "31.12.6.2 Generic pathname format [fs.path.generic]") is present[.](#4.4.sentence-1) [5](#5) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15315) The backward traversal order is the reverse of forward traversal[.](#5.sentence-1) [🔗](#lib:begin,path) `iterator begin() const; ` [6](#6) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15324) *Returns*: An iterator for the first present element in the traversal list above[.](#6.sentence-1) If no elements are present, the end iterator[.](#6.sentence-2) [🔗](#lib:end,path) `iterator end() const; ` [7](#7) [#](http://github.com/Eelis/draft/tree/9adde4bc1c62ec234483e63ea3b70a59724c745a/source/iostreams.tex#L15336) *Returns*: The end iterator[.](#7.sentence-1)