---
name: "iterator"
section: "3bobcat"
platform: "linux"
package: "libbobcat-dev"
version: "6.07.01-2"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/iterator"
---

# iterator(3bobcat)

Iterator returning plain values when dereferenced FBB::ReverseIterator - reverse\_iterator for FBB::Iterator

## NAME

FBB::Iterator - Iterator returning plain values when dereferenced

FBB::ReverseIterator - reverse\_iterator for **FBB::Iterator**

## SYNOPSIS

**#include \<bobcat/iterator\>**\

## DESCRIPTION

The **FBB::Iterator\<Type\>** class template implements a bidirectional iterator for plain data types. Dereferencing **FBB::Iterator** objects returns values of type **Type**, e.g., *char* or *int*. This iterator comes in handy in case you need to initialize an objects with a range of values, which are of some basic type (see also the **EXAMPLE** section).

**FBB::ReverseIterator** implements a reverse iterator for **FBB::Iterator**.

## NAMESPACE

**FBB**\
 All constructors, members, operators and manipulators, mentioned in this man-page, are defined in the namespace **FBB**.

## INHERITS FROM

*std::iterator\<std::bidirectional\_iterator\_tag, ...\>*

## CONSTRUCTORS

Constructors for **Iterator\<Type\>**:

- o

  **explicit Iterator(Tye const &value)**:\
   This constructor initializes the **Iterator** object with an initial *Type* value. When dereferencing this iterator, *value* is returned.

The **Iterator\<Type\>**’s default, copy, and move constructors (and its copy and move assignment operators) are available.

Constructors for **ReverseIterator\<Type\>**:

- o

  **explicit ReverseIterator(Type const &value)**:\
   This constructor initializes the **ReverseIterator** object with an initial *Type* value. When dereferencing this iterator immediately following its construction, the decremented *value* is returned (without modifying the internally stored *Type value*);

-

  - o

  **explicit ReverseIterator(Iterator\<Type\> const &iter)**:\
   This constructor initializes the **ReverseIterator** object with an initial *Iterator\<Type\>* object. When dereferencing this iterator immediately following its construction, the decremented **Iterator**’s *value* is returned (without modifying the *Type* *value* that is stored inside the **Iterator**).

The **ReverseIterator\<Type\>**’s default, copy, and move constructors (and its copy and move assignment operators) are available.

## MEMBER FUNCTIONS

For template parameter type *Type* all members of *std::iterator\<std:::reverse\_iterator\_tag, Type\>* are available, as **FBB::Iterator** and **FBB::ReverseIterator** inherit from this class.

- o

  **Iterator\<Type\> &operator++()**:\
   The (prefix) increment operator increments the iterator’s value and returns a reference to itself;

-

  - o

  **Iterator\<Type\> &operator++(int)**:\
   The (postfix) increment operator increments the iterator’s value and returns a copy of itself, initialized with the iterator’s value before it was incremented;

-

  - o

  **Iterator\<Type\> &operator--()**:\
   The (prefix) decrement operator decrements the iterator’s value and returns a reference to itself;

-

  - o

  **Iterator\<Type\> &operator--(int)**:\
   The (postfix) decrement operator decrements the iterator’s value and returns a copy of itself, initialized with the iterator’s value before it was decremented;

-

  - o

  **bool operator==(Iterator\<Type\> const &rhs) const**:\
   This operator returns *true* if the value of the current **Iterator** object is equal to the value of the *rhs* **Iterator** object;

-

  - o

  **bool operator!=(Iterator\<Type\> const &rhs) const**:\
   This operator returns *true* if the value of the current **Iterator** object is not equal to the value of the *rhs* **Iterator** object;

-

  - o

  **Type &operator\*()**:\
   The derefence operator returns a reference to the **Iterator**’s value.

-

  - o

  **Type const &operator\*() const**:\
   This derefence operator returns a reference to the **Iterator**’s immutable value.

## STATIC MEMBER FUNCTIONS

Static members of **Iterator\<Type\>**:

- o

  **Iterator\<Type\> last(Type value)**:\
   An **Iterator\<Type\>** object is returned initialized with *++value*, so it can be conveniently be used to create an inclusive iterator range (see also section **EXAMPLE**);

-

  - o

  **Iterator\<Type\> max()**:\
   An **Iterator\<Type\>** object is returned initialized with the value returned by *std::numeric\_limits\<Type\>::max()*;

-

  - o

  **Iterator\<Type\> min()**:\
   An **Iterator\<Type\>** object is returned initialized with the value returned by *std::numeric\_limits\<Type\>::min()*

Static member of **ReverseIterator\<Type\>**:

- o

  **ReverseIterator\<Type\> last(Type const &value)**:\
   A **ReverseIterator\<Type\>** object is returned initialized with **Iterator\<Type\>::last(value)**, so it can be conveniently be used to create an inclusive reverse iterator range (see also section **EXAMPLE**);

## EXAMPLE

```
#include <algorithm>
#include <iterator>
#include <iostream>
#include <string>
#include <bobcat/iterator>
using namespace std;
using namespace FBB;
int main()
{
    copy(Iterator<int>(10), Iterator<int>(20),
            ostream_iterator<int>(cout, ", "));
    cout << ’\n’;
    copy(Iterator<char>(*Iterator<char>::max() - 9),
            Iterator<char>::last(*Iterator<char>::max()),
            ostream_iterator<int>(cout, ", "));
    cout << ’\n’;
    cout << *Iterator<int>::max() << ’\n’;
    copy(Iterator<int>(*Iterator<int>::max() - 9),
            Iterator<int>::last(*Iterator<int>::max()),
            ostream_iterator<int>(cout, ", "));
    cout << ’\n’;
    copy(ReverseIterator<int>(20), ReverseIterator<int>(10),
            ostream_iterator<int>(cout, ", "));
    cout << ’\n’;
    std::string letters(Iterator<char>(’a’), Iterator<char>::last(’z’));
    cout << letters << ’\n’;
    std::string caps(ReverseIterator<char>::last(’Z’),
                     ReverseIterator<char>(’A’));
    cout << caps << ’\n’;
}
```

## FILES

*bobcat/iterator* - defines the class interface

## SEE ALSO

[**bobcat**(7)](/bobcat/7.md)

## BUGS

None Reported.

## BOBCAT PROJECT FILES

- o

  *https://fbb-git.gitlab.io/bobcat/*: gitlab project page;

Debian Bobcat project files:

- o

  *libbobcat6*: debian package containing the shared library, changelog and copyright note;

- o

  *libbobcat-dev*: debian package containing the static library, headers, manual pages, and developer info;

## BOBCAT

Bobcat is an acronym of \`Brokken’s Own Base Classes And Templates’.

## COPYRIGHT

This is free software, distributed under the terms of the GNU General Public License (GPL).

## AUTHOR

Frank B. Brokken (**f.b.brokken@rug.nl**).
