vector

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

#include <cstl/vector.h>

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

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

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

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


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

Vector

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

関数

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

生成
Vector *Vector_new(size_t n);

破棄
void Vector_delete(Vector *self);

サイズ
size_t Vector_size(Vector *self);

int Vector_empty(Vector *self);

許容量
size_t Vector_capacity(Vector *self);

int Vector_reserve(Vector *self, size_t n);

void Vector_shrink(Vector *self, size_t n);

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

T Vector_front(Vector *self);

T Vector_back(Vector *self);

挿入
int Vector_insert(Vector *self, size_t idx, T elem);

int Vector_insert_n(Vector *self, size_t idx, size_t n, T elem);

int Vector_insert_array(Vector *self, size_t idx, const T *elems, size_t n);

int Vector_insert_range(Vector *self, size_t idx, Vector *x, size_t xidx, size_t n);

int Vector_push_back(Vector *self, T elem);

削除
void Vector_erase(Vector *self, size_t idx, size_t n);

T Vector_pop_back(Vector *self);

void Vector_clear(Vector *self);

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

交換
void Vector_swap(Vector *self, Vector *x);