deque

dequeを使うには、deque.hというヘッダファイルをインクルードする。

#include <cstl/deque.h>

以下のマクロを用いてコードを展開する必要がある。

/* インターフェイスを展開 */
#define CSTL_DEQUE_INTERFACE(Name, Type)

/* 実装を展開 */
#define CSTL_DEQUE_IMPLEMENT(Name, Type)

Nameに既存の型と重複しない任意の名前を、Typeに任意の要素の型を指定する。


CSTL_DEQUE_INTERFACEの引数のNameにDeque, TypeにTを指定した場合、 以下のインターフェイスを提供する。

Deque

コンテナの型。抽象データ型となっており、以下の関数によってのみアクセスできる。

関数

以下の関数において、Deque*型の引数はNULLでないことを事前条件に含める。

生成
Deque *Deque_new(void);

破棄
void Deque_delete(Deque *self);

サイズ
size_t Deque_size(Deque *self);

int Deque_empty(Deque *self);

要素のアクセス
T *Deque_at(Deque *self, size_t idx);

T Deque_front(Deque *self);

T Deque_back(Deque *self);

挿入
int Deque_insert(Deque *self, size_t idx, T elem);

int Deque_insert_n(Deque *self, size_t idx, size_t n, T elem);

int Deque_insert_array(Deque *self, size_t idx, const T *elems, size_t n);

int Deque_insert_range(Deque *self, size_t idx, Deque *x, size_t xidx, size_t n);

int Deque_push_back(Deque *self, T elem);

int Deque_push_front(Deque *self, T elem);

削除
void Deque_erase(Deque *self, size_t idx, size_t n);

T Deque_pop_front(Deque *self);

T Deque_pop_back(Deque *self);

void Deque_clear(Deque *self);

サイズの変更
int Deque_resize(Deque *self, size_t n, T elem);

交換
void Deque_swap(Deque *self, Deque *x);