Glib::ustring_Iterator< T > Class Template Reference

The iterator type of Glib::ustring. More...

`#include <glibmm/ustring.h>`

## Public Types

using | iterator_category = std::bidirectional_iterator_tag
using | value_type = gunichar
using | difference_type = std::string::difference_type
using | reference = value_type
using | pointer = void

## Public Member Functions

| ustring_Iterator ()
| ustring_Iterator (const ustring_Iterator< std::string::iterator >& other)
value_type | operator* () const
ustring_Iterator< T >& | operator++ ()
const ustring_Iterator< T > | operator++ (int)
ustring_Iterator< T >& | operator-- ()
const ustring_Iterator< T > | operator-- (int)
| ustring_Iterator (T pos)
T | base () const

## Related Functions

(Note that these are not member functions.)
bool | operator== (const Glib::ustring::const_iterator& lhs, const Glib::ustring::const_iterator& rhs)
bool | operator!= (const Glib::ustring::const_iterator& lhs, const Glib::ustring::const_iterator& rhs)
bool | operator< (const Glib::ustring::const_iterator& lhs, const Glib::ustring::const_iterator& rhs)
bool | operator> (const Glib::ustring::const_iterator& lhs, const Glib::ustring::const_iterator& rhs)
bool | operator<= (const Glib::ustring::const_iterator& lhs, const Glib::ustring::const_iterator& rhs)
bool | operator>= (const Glib::ustring::const_iterator& lhs, const Glib::ustring::const_iterator& rhs)

## Detailed Description

### template<class T>
class Glib::ustring_Iterator< T >

The iterator type of Glib::ustring.

Note this is not a random access iterator but a bidirectional one, since all index operations need to iterate over the UTF-8 data. Use std::advance() to move to a certain position. However, all of the relational operators are available: `== != < > <= >=`

A writeable iterator isn't provided because: The number of bytes of the old UTF-8 character and the new one to write could be different. Therefore, any write operation would invalidate all other iterators pointing into the same string.

The Glib::ustring iterated over must contain only valid UTF-8 data. If it does not, operator++(), operator--() and operator*() may make accesses outside the bounds of the string. A loop such as the following one would not stop at the end of the string.

// Bad code! Don't do this!
const char not_utf8[] = { '\x80', '\xef', '\x80', '\x80', '\xef', '\x80' };
const Glib::ustring s(not_utf8, not_utf8 + sizeof not_utf8);
for (Glib::ustring::const_iterator it = s.begin(); it != s.end(); ++it)
std::cout << *it << std::endl;

Template Parameters

  T | std::string::iterator or std::string::const_iterator

## Member Typedef Documentation

template <class T >

using Glib::ustring_Iterator< T >::difference_type = std::string::difference_type

template <class T >

using Glib::ustring_Iterator< T >::iterator_category = std::bidirectional_iterator_tag

template <class T >

using Glib::ustring_Iterator< T >::pointer = void

template <class T >

using Glib::ustring_Iterator< T >::reference = value_type

template <class T >

using Glib::ustring_Iterator< T >::value_type = gunichar

## Constructor & Destructor Documentation

template <class T >

Glib::ustring_Iterator< T >::ustring_Iterator | ( |  | ) |

inline

template <class T >

Glib::ustring_Iterator< T >::ustring_Iterator | ( | const ustring_Iterator< std::string::iterator >& | other | ) |

inline

template <class T >

Glib::ustring_Iterator< T >::ustring_Iterator | ( | T | pos | ) |

inline explicit

## Member Function Documentation

template <class T >

T Glib::ustring_Iterator< T >::base | ( |  | ) | const

inline

template <class T >

value_type Glib::ustring_Iterator< T >::operator* | ( |  | ) | const

inline

template <class T >

ustring_Iterator<T>& Glib::ustring_Iterator< T >::operator++ | ( |  | ) |

inline

template <class T >

const ustring_Iterator<T> Glib::ustring_Iterator< T >::operator++ | ( | int |  | ) |

inline

template <class T >

ustring_Iterator<T>& Glib::ustring_Iterator< T >::operator-- | ( |  | ) |

inline

template <class T >

const ustring_Iterator<T> Glib::ustring_Iterator< T >::operator-- | ( | int |  | ) |

inline

## Friends And Related Function Documentation

template <class T >

bool operator!= | ( | const Glib::ustring::const_iterator& | lhs,
|  | const Glib::ustring::const_iterator& | rhs
| ) |  |

related

template <class T >

bool operator< | ( | const Glib::ustring::const_iterator& | lhs,
|  | const Glib::ustring::const_iterator& | rhs
| ) |  |

related

template <class T >

bool operator<= | ( | const Glib::ustring::const_iterator& | lhs,
|  | const Glib::ustring::const_iterator& | rhs
| ) |  |

related

template <class T >

bool operator== | ( | const Glib::ustring::const_iterator& | lhs,
|  | const Glib::ustring::const_iterator& | rhs
| ) |  |

related

template <class T >

bool operator> | ( | const Glib::ustring::const_iterator& | lhs,
|  | const Glib::ustring::const_iterator& | rhs
| ) |  |

related

template <class T >

bool operator>= | ( | const Glib::ustring::const_iterator& | lhs,
|  | const Glib::ustring::const_iterator& | rhs
| ) |  |

related