---
name: "std::_Deque_iterator"
section: "3"
platform: "linux"
package: "gcc"
version: "16.2.1+r23+gd564253eb6c8-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/std::_Deque_iterator"
---

# std::\_Deque\_iterator(3)

A deque::iterator.

## NAME

std::\_Deque\_iterator\< \_Tp, \_Ref, \_Ptr \> - A deque::iterator.

## SYNOPSIS

\#include \<deque\>

### Public Types

typedef **\_\_ptr\_rebind**\< \_Ptr, \_Tp \> **\_Elt\_pointer**\
 typedef **\_\_ptr\_rebind**\< \_Ptr, \_Elt\_pointer \> **\_Map\_pointer**\
 typedef \_Deque\_iterator **\_Self**\
 typedef \_\_iter\< const \_Tp \> **const\_iterator**\
 typedef ptrdiff\_t **difference\_type**\
 typedef \_\_iter\< \_Tp \> **iterator**\
 typedef **std::random\_access\_iterator\_tag** **iterator\_category**\
 typedef \_Ptr **pointer**\
 typedef \_Ref **reference**\
 typedef size\_t **size\_type**\
 typedef \_Tp **value\_type**\

### Public Member Functions

**\_Deque\_iterator** (\_Elt\_pointer \_\_x, \_Map\_pointer \_\_y) noexcept\
 **\_Deque\_iterator** (const \_Deque\_iterator &\_\_x) noexcept\
 template\<typename \_Iter, typename = \_Require\<is\_same\<\_Self, const\_iterator\>,				   is\_same\<\_Iter, iterator\>\>\> **\_Deque\_iterator** (const \_Iter &\_\_x) noexcept\
 iterator **\_M\_const\_cast** () const noexcept\
 void **\_M\_set\_node** (\_Map\_pointer \_\_new\_node) noexcept\
 reference **operator\*** () const noexcept\
 \_Self & **operator++** () noexcept\
 \_Self **operator++** (int) noexcept\
 \_Self & **operator+=** (difference\_type \_\_n) noexcept\
 \_Self & **operator--** () noexcept\
 \_Self **operator--** (int) noexcept\
 \_Self & **operator-=** (difference\_type \_\_n) noexcept\
 pointer **operator-\>** () const noexcept\
 \_Deque\_iterator & **operator=** (const \_Deque\_iterator &)=default\
 reference **operator\[\]** (difference\_type \_\_n) const noexcept\

### Static Public Member Functions

static size\_t **\_S\_buffer\_size** () noexcept\

### Public Attributes

\_Elt\_pointer **\_M\_cur**\
 \_Elt\_pointer **\_M\_first**\
 \_Elt\_pointer **\_M\_last**\
 \_Map\_pointer **\_M\_node**\

### Friends

\_Self **operator+** (const \_Self &\_\_x, difference\_type \_\_n) noexcept\
 \_Self **operator+** (difference\_type \_\_n, const \_Self &\_\_x) noexcept\
 template\<typename \_RefR, typename \_PtrR\> difference\_type **operator-** (const \_Self &\_\_x, const \_Deque\_iterator\< \_Tp, \_RefR, \_PtrR \> &\_\_y) noexcept\
 difference\_type **operator-** (const \_Self &\_\_x, const \_Self &\_\_y) noexcept\
 \_Self **operator-** (const \_Self &\_\_x, difference\_type \_\_n) noexcept\
 strong\_ordering **operator\<=\>** (const \_Self &\_\_x, const \_Self &\_\_y) noexcept\
 template\<typename \_RefR, typename \_PtrR\> bool **operator==** (const \_Self &\_\_x, const \_Deque\_iterator\< \_Tp, \_RefR, \_PtrR \> &\_\_y) noexcept\
 bool **operator==** (const \_Self &\_\_x, const \_Self &\_\_y) noexcept\

## Detailed Description

### template\<typename \_Tp, typename \_Ref, typename \_Ptr\>

struct std::\_Deque\_iterator\< \_Tp, \_Ref, \_Ptr \>"A deque::iterator.

Quite a bit of intelligence here. Much of the functionality of deque is actually passed off to this class. A deque holds two of these internally, marking its valid range. Access to elements is done as offsets of either of those two, relying on operator overloading in this class.

All the functions are op overloads except for \_M\_set\_node.

## Member Function Documentation

### template\<typename \_Tp, typename \_Ref, typename \_Ptr\> void std::\_Deque\_iterator\< \_Tp, \_Ref, \_Ptr \>::\_M\_set\_node (\_Map\_pointer \_\_new\_node) \[inline\], \[noexcept\]

Prepares to traverse new\_node. Sets everything except \_M\_cur, which should therefore be set by the caller immediately afterwards, based on \_M\_first and \_M\_last.

## Author

Generated automatically by Doxygen for libstdc++ from the source code.
