>サイトトップへ >このカテゴリの一覧へ

(

''

+.(*(N

アダプタ

F

PP&

F

6

PLP&

F

PPF

PF

33!&

F

6

PLPF  6

PF

33!6&

F

PPP&

F

6

PLPP&

F

PPPF

PPF

33!&

F

6

PLPPF

 6

PPF

33!6&

F

PPP&

F

6

PPLP&

F

PPPF

PF

33!

&

F

6

PPLP

F

 6

PF

33!6

&

F

PPP

P

&

F

6

PPLP

P

&

F

PPP

P

F

PPF

33!

&

F

6

PPLP

P

F

6

PPF

33!6

&

R

関数オブジェクトと関数テンプレートとを一緒に使うことによって,ライブラリの表現能力が向上し,結果として,

効率のよいコード にすることができる。

"##

プログラムで,

3 %

型を要素とする二つのベクトル,

及び

の要素ごとの加算を行ってその結

果を

に入れるには,次のように書けばよい。

(

(

(

(

&

のすべての要素の符号を反転する場合,次のように書けばよい。

(

(

(

&

アダプタなどの構成要素が,

個 又は

個の実引数をもつ関数オブジェクトを操作できるようにするには,その関

数オブジェクトに対して,次の型名の定義を提供しておかなければならない。

実引数が

個の場合,

及び

実引数が

個の場合,

及び

基本

次のクラスは,実引数の型 及び 返却値の型に対する型名の定義を容易にするために提供される。

6

E

P

Q

6

P&

E

P&

R&

6L

6+

E

P

Q

6L

PP

&

6+

P

P

&

E

P&

R&

算術演算

標準ライブラリは,言語自体(

#(

及び

#)

)で規定されるすべての算術演算子に対する基本関

数オブジェクトクラスを提供している。

/

0

&

/((0

5

)

(

)

6


)

効果  

は,

)

を返す。

/

0

&

/((0

5

)

(

)

6

効果  

は,

V

を返す。

/

0

&

/((0

5

)

(

)

6

効果  

は,

!

を返す。

/

0

!

&

/((0

5

)

(

)

6

効果  

は,

'

を返す。

/

0

&

/((0

5

)

(

)

6

効果  

は,

U

を返す。

/

0

&

/(0

5

)

6

効果  

は,

V

を返す。

比較演算

標準ライブラリは,言語自体(

#*

及び

#

)で規定されるすべての比較演算子に対する基本関

数オブジェクトクラスを提供している。

/

0

&

/((0

5

)

(

)

6

効果  

は,

%%

を返す。

/

0

&

/((0

5

)

(

)

76

効果  

は,

[%

を返す。

/

0

&

/((0

5

)

(

)

6

効果  

は,

を返す。

/

0

&

/((0

5

)

(

)

6

効果  

は,

を返す。

/

0

&

/((0

5

)

(

)

6

効果  

は,

%

を返す。


/

0

&

/(( 0

5

)

(

)

6

効果  

は,

%

を返す。

上のテンプレート

及び

については,その任意のポインタ型に対す

る特殊化は,組み込み演算子の

%

及び

%

が全順序でなかったとしても,全順序となる。

論理演算

標準ライブラリは,言語自体(

#

##

及び

#

)で規定されるすべての論理演算子に対す

る基本関数オブジェクトクラスを提供している。

/

0

&

/((0

5

)

(

)

6

効果  

は,

00

を返す。

/

0

&

/(( 0

5

)

(

)

6

効果  

は,

11

を返す。

/

0

&

/(0

5

)

6

効果  

は,

[

5

を返す。

#

否定子

否定子

L

及び

+

は,単項 及び

項の述語を実引数とし ,その否定を結果として

返す(

#

参照)

/

80

&

/

8&&(  0

5

&

8)

8&&)

6

効果  

は,

[

を返す。

/

80

/80

8)

返却値  

C

/

80

&

/

8&&  (

8&&  (

0

5

&

8)

8&&  )

(

8&&  )

6

効果  

は,

[

を返す。

/

80

/80

1

8)

返却値  

C


*

(

結合子

結合子

L

及び

+

は,二つの実引数をもつ関数オブジェクト

及び 値

を受け取り,

の第

実引数 又は 第

実引数に

を与えて得られる実引数が一つの関数オブジェクトを返す。

(

クラステンプレート

L

/

90

&

/

9&&   (

9&&0

5

&

9

9&&

!

&

9)

(

9&&  )

9&&

9&&  )

6

効果  

コンストラクタは,

で,

で初期化する。

返却値  

は,

を返す。

(

L

/

9(

0

/90

9)

(

)

返却値  

LB

B33

(

クラステンプレート

+

/

90

1

&

/

9&&  (

9&&0

5

&

9

9&&

!

&

1

9)

(

9&&  )

9&&

9&&  )

6

効果  

コンストラクタは,

で,

で初期化する。

返却値  

は,

を返す。

(

+

/

9(

0

1/90

1

9)

(

)

返却値  

+B

B33

P(

(

+

/&

これは,

より大きい最初の

の要素を見つける。

P(

(

L

/&

これは,

より小さい最初の

の要素を見つける。


*

)

関数へのポインタに対するアダプタ

標準ライブラリは,次のテンプレートを提供し,

( 単項 又は

項の)関

数へのポインタを関数アダプタとともに使えるようにしている。

/

:(

;0

&

/:(

;0

5

&

 ;

$:

;

:

6

効果  

は,

を返す。

/

:(

;0

/ :(

;0

;

$:

返却値  

6

E

/

:(

:1(

;0

&

/:(: 1(;  0

5

&

 ;

$:(

:1

;

:

(

:1

6

効果  

は,

を返す。

/

:(

:1(

;0

 /: (: 1(;  0

;

$:(

:1

返却値  

6L 6

+ E

P(

(

L+

P

Y7Y Y7))Y&

これは,列

の中のそれぞれの

:";

を,

:"##;

に置き換える。

メンバへのポインタに関するアダプタ

)

の関数へのポインタに対するのと同じ機能を,メンバへのポ

インタに対して提供する。

/

<(

0

&

/$(

<0

5

&

<

&&$

<

$

6

効果  

は,ポインタ実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。

/

<(

(

:0

&

/$(

:(

<0

5

&

<

&&$:

<

$

(

:

6

効果  

L

は,ポインタ実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期化するため

のメンバ関数を呼び出す。

関数型への多重ポインタをもつ処理系では,関数テンプレート

%$

も提供する。


*

/

<(

0

/<(0

<

&&$

/

<(

(

:0

/<((:0

<

&&$:

効果  

0533

が返してくる( 関数)オブジェクトは,それに

5

へのポインタと

に必要な実引数( もしあ

れば )とを与えると,

533

を呼び出す。

/

<(

0

&

/(

<0

5

&

<

&&$

<

)

6

効果  

は,参照の実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。

/

<(

(

:0

&

/(

:(

<0

5

&

<

&&$:

<

)

(

:

6

効果  

L

は,参照の実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期化するた

めのメンバ関数を呼び出す。

/

<(

0

/<(0

<

&&$

/

<(

(

:0

/<((:0

<

&&$:

効果  

0533

は,

5

への参照 及び

に必要なもう一つの実引数( もしあれば )が与えられたときに,

533

を呼び出すことを可能にするオブジェクトを返す。

/

<(

0

&

/$(

<0

5

&

<

&&$

<

$

6

効果  

は,ポインタ実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。

/

<(

(

:0

&

/$(

:(

<0

5

&

<

&&$:

<

$

(

:

6

効果  

L

は,ポインタ実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期化す

るためのメンバ関数を呼び出す。

/

<(

0

/<(0

<

&&$

/

<(

(

:0

/<((:0

<

&&$:


*

効果  

0533

は,

5

へのポインタ 及び

に必要なもう一つの実引数( もしあれば )が与えられたときに,

533

を呼び出すことを可能にするオブジェクトを返す。

/

<(

0

&

/(

<0

5

&

<

&&$

<

)

6

効果  

は,参照の実引数が与えられたとき,それを初期化するためのメンバ関数を呼び出す。

/

<(

(

:0

&

/(

:(

<0

5

&

<

&&$:

<

)

(

:

6

効果  

L

は,参照の実引数 及び 適当な型のもう一つの実引数が与えられたとき,それを初期

化するためのメンバ関数を呼び出す。

/

<(

0

/<(0

<

&&$

/

<(

(

:0

/<((:0

<

&&$:

効果  

0533

は,参照の実引数 及び

に必要なもう一つの実引数(もしあれば )が与えられたとき,

それを初期化するためのメンバ関数を呼び出す。

メモリ

ヘッダ

一覧

Q

''

+.(M(L

省略時割付け子

&

&

G

%%

0

G0

&

G

[%

0

G0

&

''

+.(M(+

素記憶域反復子

B<

PP

&

''

+.(M(*

一時バッファ

! P

PP

P

&

PP

!

&

''

+.(M(M

特殊アルゴ リズム

<<

9<

9<

$P

<

<

<<

9<

&

9<

$P

9

<

9<

0

&

9<

F$

$P

P

9

<

F$

0

&

''

+.(M(/

ポインタ

5

P&


*

R

省略時の割付け子

Q

&

''

に対する特殊化

Q

3

!

&

!

P&

''

への参照のメンバはない。

P&

G

Q

G

&

R&

R&

Q

3

$P

$P&

P

P&

!

&

!

P&

0

&

0

P&

P&

G

Q

G

&

R&

&

0

&

G

G0

&

X

&

&

P

P

&

$P

3

3

P

%

.&

$P

&

$P

P$

&

0

&

&

R&

R

割付け子

のメンバ

返却値  

0

返却値  

0

'

(

/!0&&

,

参考

33

$

を使用する(

参照)

要件  

は,

であるか,メンバ

から受け取りまだ

に渡されていない値であるかでなけれ

ばならない。

の値は,処理系が性能を改善するために用いてもよい。

返却値  

P

$

の大きさをもつ配列の先頭要素へのポインタを返す。この配列は,型

のオブジェクトに対

し境界調整されている。

参考 この記憶域は,

33

$

によって確保される。しかし,この関数が,いつ,どのよう

な頻度で呼ばれるかについては規定しない。また,

の使い方も規定しない。処理系によっては,局所

性を表す意図で用いてもよい。


*

例外  記憶域が確保できなかった場合,

を送出する。

!

(

'

要件  

は,

によって得られた値でなければならない。

は,

を返した

の呼出しにおける第

引数と等しくなければならない。

効果  

の指す記憶域を解放する。

参考

33

!

を使用する。しかし ,それがいつ呼び出されるかは規定しない。

'

'

返却値  

A

.

が成功する最大の

A

を返す。

!

(

!

返却値  

!

!

返却値  

!

VX

割付け子

の大域的変数

/

(

10

,,

/0)(

/10)

返却値  

/

(

10

-,

/0)(

/10)

返却値  

素記憶域反復子

素記憶域反復子

は,プログラムが初期化していない記憶域に何ら

かの結果を書き込めるようにする目的で提供してある。テンプレート仮引数

B<

は,

!

が,

へのポ インタを返す

0

の定義されたオブジェクトを返すようにするために必要とし ,また,出力反復子の

要件(

参照)を満足するためにも必要とする。

Q

B<

PP

3

P

P

Q

3

PP

B

<

&

PP

B

<

0

!&

PP

B

<

0

%

0

&

PP

B

<

0

))&

PP

B

<

))&

R&

R

9 =

効果  

が指すのと同じ値を指す反復子を初期化する。

/9 =  ( 0)

$

返却値  

!

/9 =  ( 0)

,

)

効果  反復子が指す場所に,

を用いて値を構築する。

返却値  反復子への参照

/9 =  ( 0)

%%


*#

効果  事前増分を行う。すなわち,反復子を一つ進め,その反復子への参照を返す。

/9 =  ( 0

%%

効果  事後増分を行う。すなわち,反復子を一つ進めるが,進める前の反復子の値を返す。

一時バッファ

/

0

/$(

0

効果  

個の隣接した型

のオブジェクトを格納するのに十分な記憶域へのポインタを返す。

返却値  

バッファのアドレス 及び 容量(

$

を単位とする。)から成る対を返す。記憶域が確保できなかった

場合は,値

の対を返す。

/

0

!

 $

効果  

が指すバッファを解放する。

要件  

バッファは,

によって確保されたものでなければならない。

特殊アルゴリズム

に示すアルゴリズムにおいて,テンプレート仮引数として使われるす

べての反復子は,

!

が返すオブジェクトに対して

0

が定義されている必要があり,それは

へのポイ

ンタを返す。アルゴリズム

$

では,テンプレート仮引数

<<

は,入力反復子(

の要件を満足する必要がある。ここでのすべてのアルゴ リズムにおいて,テンプレート仮引数

9<

は,

前進反復子(

)の要件,及び 変更可能な反復子(

)の要件を満足しなければならないし,これらの反復子

は,増加,代入,比較 又は 有効な反復子間の差分の操作中に例外を送出してはならない。ここでのアルゴ リズムで

は,例外が送出されても無効となる。

$

/

==(

>=0

>=

'= =

(

==

(

>=

効果  次のプログラムと同等とする。

&

[%

&

))

))

P

!

0!

P

9

<

33

P

!

&

返却値  

$

/

>=(

0

!

'> =

(

>=

(

)

効果  次のプログラムと同等とする。

&

[%

&

))

P

!

0!

P

9

<

33

P

&

$

/

>=(

<'(

0

!

'> =

(

<'

(

)

効果  次のプログラムと同等とする。

&

VV&

))

P

!

0!

P

9

<

33

P

&


*(

#

クラステンプレート

テンプレート

は,

によって得られたオブジェクトへのポイン

タを格納する。そして,

自身が解体されるとき( 例えば,ブロック有効範囲を抜けるとき)には,格納して

いたポインタが指すオブジェクトを消去する。

テンプレート

は,

への参照を保持する。これは,

のオブジェクトを関数に渡し

たり,関数の返却値としたりするときに用いられる。

Q

J

PP

QR&

5

P

Q

3

5

P&

''

+.(M(/(L

コンストラクタ,コピー,デストラクタ

P5!

%.

&

PP

0

&

J

PP

J

0

&

P0

%P

0

&

J

P0

%P

J

0

&

P0

%P

P

5

&

XP

&

''

+.(M(/(+

メンバ

50

!

&

5!

V

&

5!

&

5!

&

5!

%.

&

''

+.(M(/(*

型変換

PP

P

5

&

J

PPJ

&

J

PJ

&

R&

R

は,所有権の厳格な意味規則を提供する。

は,それが保持するポインタが指すオブジェクトを

所有する。

をコピーすると,ポインタがコピーされるだけでなく,ポインタが指すオブジェクトに対する

所有権がコピー先に移る。同一のオブジェクトに対し ,複数の

が同時に所有権をもっている場合の動作は,

未定義とする。

参考

を使うことによって,次のことが可能になる。

動的に割り付けられたメモリに対し ,例外に対する安全性を一時的に提供する。

動的に割り付けられたメモリの所有権を,関数に渡す。

動的に割り付けられたメモリを,関数の返却値として返す。

は,標準ライブラリのコンテナ要素に対する二つの要件,コピー構築可能性 及び 代入可能性を

満足しない。したがって,標準ライブラリのコンテナを

を使って具現した場合,その動作は未

定義とする。

#

のコンスト ラクタ

?$

,

事後条件  

コンストラクタ実行後,

!

は,ポインタ

を保持する。

)

効果  

(

を呼び出す。

事後条件  

コンストラクタ実行後,

!

は,

(

が返すポインタを保持する。

/

@0

/@0)

要件  

J!

は,暗黙の型変換で

5!

に変換できなければならない。

効果  

(

を呼び出す。


*)

事後条件  

コンストラクタ実行後,

!

は,

(

が返すポインタを保持する。

)

,)

要件  式

は,適格でなければならない。

効果  

(

を呼び出す。

返却値  

!

/

@0

)

,/@0)

要件  

J!

は,暗黙の型変換によって

5!

に変換できなければならない。式

は,適格でなければなら

ない。

効果  

(

を呼び出す。

返却値  

!

.

要件  式

は,適格でなければならない。

効果  

を呼び出す。

#

のメンバ

?)

$

要件  

[%

.

返却値  

!

?$

A0

返却値  

?$

返却値  

!

が保持するポインタを返す。

?$

返却値  

事後条件  実行後,

!

は,空ポインタを保持する。

!

?$

,

効果  

[%

の場合,

を呼び出す。

事後条件  実行後,

!

は,ポインタ

を保持する。

#

の型変換

/?0

効果  

が保持する

に対し

(

を呼び出す。

事後条件  実行後,

!

は,

が返したポインタを保持する。

/

@0

/@0

返却値  

!

を保持する

J

を返す。

/

@0

/@0

効果  

を呼び出す。

返却値  

が返したポインタを保持する

J

を返す。

)

,/?0

効果  

が参照を保持する対象の

に対して

(

を呼び出す。

返却値  

!


*

(

ライブラリ

ヘッダ

に示す。

ヘッダ

の要約

種別

名前  

関数

,

,

,

その内容は,次の変更点を除き,

"

ライブラリのヘッダ

(

の内容と同じとする。

関数

及び

が記憶域を確保するとき,

33

)を用いること

はない。

関数

が記憶領域を解放するとき,

33

を用いることはない。

参照  

6

)

ヘッダ

に示す。

ヘッダ

の要約

種別

名前  

マクロ

AG??

$

関数

,

,

,

,

その内容は,

で規定する

についての変更点を除き,

"

ライブラリのヘッダ

(

の内容と

同じとする。

参照  

6

)

#

日付 及び 時刻 ヘッダ

#

に示す。

#

ヘッダ

の要約

種別

名前  

マクロ

AG??

$

,

,

構造体

関数

,

,

,

,

,

,

,

,

その内容は,

"

ライブラリのヘッダ

(

の内容と同じとする。

参照  

6

)

及び

6

追補

(

文字列ライブラリ

この箇条では,

:

文字

;

の列を操作するためのライブラリ要素を規定する。このライブラリ

では,任意の

"

互換型(

*

)を文字として扱うことができ,そのような型を文字様の型(

-I

1

)と呼ぶ。

文字様の型のオブジェクトは,文字様のオブジェクト,又は 単に文字(

)と呼ぶ。

(

に,

の内容を示す。

(

 文字列ライブラリの要約

箇条

ヘッダ  

文字特性

文字列クラス

ナル文字終端列ユーティリティ


**

文字特性

では,文字特性(

!

)を表すクラスに対する要求を規定する。そして,この要求

を満たすクラステンプレート

を規定し,それを特殊化した二つのクラス,

及び

を規定する。

及び

)

で規定するほとんどのクラスは,関連する型 及び 関数を与えてはじめて意味が決まる。これらの型

及び 関数は,テンプレート仮引数

:!;

として渡される特性のメンバ型定義 及び メンバ関数として与える。

では,これらのメンバが保証しなければならない意味を規定する。

文字列クラス 又は 入出力ストリームクラスを生成して,特定の文字コンテナ型

7

を扱うには,

7

及び そ

の文字特性クラス

をテンプレート実引数として渡す必要がある。こうした文字テンプレート 又は 入出力ス

トリームテンプレートでは,これらの実引数を受け取るテンプレート仮引数が,

及び

として定義され

ている。このとき,

33

7

とは,同一の型でなければならない。

では,構造体テンプレート

を規定し ,その二つの明示的な特殊化である

及び

を規定する。これらは,ヘッダ

に含まれ,

で規定

される要求を満足する。

文字特性に対する要求

)

で用いる記号を,次のとおり定義する。

5

は,文字コンテナ型

7

に関係する型や関数を記述した文字特性クラス

を表す。

及び

は,

7

型の値を表す。

及び

は,

7!

型の値を表す。

は,

7!

型の値を表す。

及び

は,

$

型の値を表す。

及び

は,

533

型の値を表す。

は,

533

型の値を表す。

は,

533

型の値を表す。

文字特性に関する操作は,例外を送出してはならない。

)

 文字特性

に対する要求

返却値の型

表明/参考/事前条件/事後条件

計算量

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533

で規定する。)

コンパイル時

533

( 用いない。)

%

の代入を行う。

定数

533

返却値  

と等しいとして扱える場合

定数

とし ,そうでない場合

とする。

533

返却値  

より小さいとして扱える場合

定数

とし ,そうでない場合

とする。

533

7,

内のすべての

に対し

533ST

線形

ST

である場合,

とする。

そうでない場合,

7,

内の ある

に対し

533ST ST

となり,

7,

内の

すべての

に対し

533ST ST

なる

が存在するとき負の値とする。

そうでない場合,正の値とする。

533

$

返却値  

533ST

線形

となる最小の

533

533

返却値  

7,)

内で,

533!

線形

!

となる最小の

。そのような

が存在しない場合,

とする。


)

 文字特性

に対する要求( 続き)

返却値の型

表明/参考/事前条件/事後条件

計算量

533

533

!

返却値  

7,

内のすべての

に対して

線形

533ST

S

T

を実行した後の

区間

7,

)

7,

)

が重なっていても,

正確にコピーする。

533

533

!

事前条件  

7,)

内に存在しない。

線形

返却値  

7,

内のすべての

に対して

533ST

S

T

を実行した後の

を返す。

533

533

!

7,

内のすべての

に対して

線形

533ST

を実行した後の

返す。

533

533

返却値  

533

 533

定数

のとき

とする。そうでない場合,

533

 533

となる

とする。

533

533

533

 533

定数

であるような

が存在する場合,

とする。そうでない場合,未規定とする。

533

533

返却値  

及び

定数

の定義によって制約される値

とする。

533

返却値  

すべての

及び

に対し ,

定数

533

の値は,

533

533

 533

に等しい。

でない場合,

がど ちらも

533

のコピーのとき

でも

でもない場合,

の一方が

533

のコピーであり,他方が

533

のコピーでないとき

のいずれでもない場合,

未規定の値とする。

533

533

すべての

の値に対して,

533

定数

 533

となる

とする。

次の構造体テンプレートを,明示的な特殊化のための基底として,ヘッダ

内で提供しておかなければな

らない。

P&

ここ以降,

の終わりまで,

は,この特性テンプレートの仮引数を表すものとする。

文字特性の型定義

#B:;

は,

及び

)

で規定するクラスの実装で用いられる文字コンテナ型を示すのに用いる。

=

要件  

文字コンテナ型

に対し,対応するコンテナ型

<A

が存在する。

<A

は,対応する

値から変換されるすべての有効な文字 及び ファイルの終わりを表す値

を表現することができる,型 又は ク


ラスとする。型

は,ファイルの終わりを保持可能な文字コンテナ型であり,入出力ストリームクラスで定

義されるメンバ関数の返却値型に用いる。

9>>

89<

要件  

及び

に対する要件は,

)

で規定する。

<:C

要件  

は,型

77

)に対する要件を満たしていなければならない。

の特殊化

Q

P

&

P

P

&

R

ヘッダ

では,テンプレート構造体

を特殊化した

種類の構造体を宣言する。

構造体

は,

型に対するテンプレート 構造体

の特殊化とする。この構造体

は,

及び

)

で規定するクラスの動作を保証するのに必要な,すべての型 及び 関数を含む。

それらの型 及び 静的メンバ関数は,

で規定する。

構造体

Q

P

Q

P&

P&

P&

P&

P

P&

P0

L

P0

+&

P0

L

P0

+&

P0

L

P0

+&

P!

L

P!

+

$P

&

$P

P!

&

P!

P!

$P

P0

&

P!

P!

L

P!

+

$P

&

P!

P!

L

P!

+

$P

&

P!

P

!

$P

P

&

P

P

P0

&

P

PP

P0

&

P

PP

P0

&

PP

P0

L

P0

+&

P

&

R&

R

ヘッダ

)では,テンプレート構造体

に対する特殊化を宣言する。これは,

ナロー文字単位の入出力ストリームクラスに用いる。

この特殊化では,

及び

が,それぞれ,型

及び

として定義してある。

は,処理系定義とする。ただし ,

CBF

に対する要件(

)を満たしていなければならない。

は,処理系定義とする。ただし ,

B99

に対する要件(

)を満たしていなければならない。

は,ヘッダ

の中で定義される。この型は,処理系定義の多バイト符号化規則において生じ

うる,すべての変換状態を表せる型とする。

?

%

を保持可能だとすると,いくつかの入出力ストリーム操作は,意外な結果をもたらすだろう。


二つの実引数のメンバ

及び

は,それぞれ,組込みの演算子

%

%%

及び

と同じものとして定義し

てある。

メンバ

は,

8B9

を返却する。

構造体

Q

P

P

Q

P

P&

P

P&

P&

P&

P

P&

P0

L

P0

+&

P0

L

P0

+&

P0

L

P0

+&

P!

L

P!

+

$P

&

$P

P!

&

P!

P!

$P

P0

&

P!

P!

L

P!

+

$P

&

P!

P!

L

P!

+

$P

&

P!

P

!

$P

P

&

P

P

P0

&

P

PP

P0

&

P

PP

P0

&

PP

P0

L

P0

+&

P

&

R&

R

ヘッダ

)は,テンプレート構造体

に対する特殊化も宣言する。これは,

ワイド 文字単位の入出力ストリームクラスに用いる。

及び

として定義される型は,

及び

とする。

は,処理系定義とする。

は,

で規定された

CBF

の要件を満たしていなければ

ならない。

参考 この段落は,意図的に空とする。

は,

の中で定義される。この型は,処理系定義の多バイト符号化規則において生じ うる,

すべての変換状態を表すことができる型とする。

二つの実引数のメンバ

及び

は,それぞれ,組込みの演算子

%

%%

及び

と同じものとして定義し

てある。

メンバ

は,

I8B9

を返却する。

文字列クラス

ヘッダ

は,すべての文字様(

)のテンプレート実引数を扱うことができる 基本

的な文字列クラステンプレート 及び その特性を定義する。更に,このヘッダでは,文字様の可変長オブジェクト列

を操作するための 幾つかの関数呼出し情報も定義する。

ヘッダ

では,特殊化されたテンプレート クラス,

及び

も定義する。

ヘッダ

の一覧

Q

''

+L(L

文字特性

P&

P

&

P

P

&

''

+L(*

クラステンプレート

P

%

P

6

%


P&

6

P

 6

)

P

 6

0

P

 6

0

&

6

P

 6

)

!

P

 6

0

&

6

P

 6

)

P

 6

0

&

6

P

 6

)

P

 6

0

!

&

6

P

 6

)

P

 6

0

&

6

%%

P

6

0

P

6

0

&

6

%%

!

P

6

0

&

6

%%

P

6

0

!

&

6

[%

P

6

0

P

6

0

&

6

[%

!

P

6

0

&

6

[%

P

6

0

!

&

6

P

6

0

P

6

0

&

6

P

6

0

!

&

6

!

P

6

0

&

6

P

6

0

P

6

0

&

6

P

6

0

!

&

6

!

P

6

0

&

6

%

P

6

0

P

 6

0

&

6


%

P

6

0

!

&

6

%

!

P

6

0

&

6

%

P

6

0

P

6

0

&

6

%

P

6

0

!

&

6

%

!

P

6

0

&

''

+L(*(,(N

6

P

6

0

P

6

0

&

6

P

0

P

0

P

 6

0

&

6

P

0

P

0

P

6

0

&

6

P

0

P

0

P

6

0

&

6

P

0

P

0

P

6

0

&

P

&

P

P

&

R

クラステンプレート

クラステンプレート

は,文字様の型

に対し ,可変

個かつ任意の文字様のオブジェクト(

)によって構成される列を保持可能なオブジェクトを定義する。列の先頭位

置の番号は,

とする。このような列は,その文字様の型が文脈から明らかな場合,文字列(

!

)と呼ぶ。以後,

では,

に与えられた文字様の型を

で表す。文字列のための記憶域は,型

のメ

ンバ関数によって,必要に応じて割付け 及び 解放が行われる。この記憶域割付けには,テンプレート仮引数で与え

られた

6

クラスを用いる。

633

は,

と同じでなければならない。

クラステンプレート

は,

で規定する列

!A

に対する要件を満足する。更に,

に対する反復子は,ランダムアクセス反復子(

#

)であるから,

は,逆進可能コン

テナの要件も満足する。

いかなる場合にも,

$

%

とする。

で規定する関数は,

種類のエラーを,異なる例外を用いて通知する。

長さに関するエラー:

*

範囲外アクセスに関するエラー:

*#

文字列操作の結果として

$

$

をこえた場合,その操作は,

を送出する。

の列の要素に対する参照,ポインタ 及び 反復子は,

のオブジェクトに対して次のよ

うな操作を行った場合,無効になることがある。

非メンバ関数の

)

),

)*

)及び

)*

)の実引数

として用いた場合。


#

33

の実引数として用いた場合。

メンバ関数の

及び

を呼び出した場合。

定値でないメンバ関数を呼び出した場合。ただし ,

ST

及び

を除く。

上のいずれかの場合に引き続いて( 反復子を返す

及び

を除く。),定値でないメンバ

関数

ST

又は

を初めて呼び出した場合。

参考 これらの規則は,

を参照カウンタの手法で実装することを許している(そうしなくとも

よい。)

。参照カウンタによる実装は,そうでない実装と同じ意味をもたなければならない。

LYY&

33

%

L(&

+

%

L&

!

%

ZZ&

''

変更されるのは,

L

だけでなければならない。

Q

%

P

6

%

P

Q

3

''

P&

33P

P&

6

P&

633$P

$P&

633

P

P&

633

&

633P

P&

633

&

633P

P&

処理系定義の型

&

''

+*(L

参照

処理系定義の型

P&

''

+*(L

参照

33P

P

&

33P

P

PP

&

$P

%

VL&

''

+L(*(L

構築/コピー/代入

P

60

%

6&

P

P0

&

P

P0

$P

$P

%

60

%

6&

P

!

$P

60

%

6&

P

!

60

%

6&

P$

P

60

%

6&

<<

P<

<

<<

60

%

6&

XP

&

P0

%

P0

&

P0

%

!

&

P0

%

&

''

+L(*(+

反復子

&

P

&

&

P

&

P

&

PP

&


(

P

&

PP

&

''

+L(*(*

容量

$P

$

&

$P

&

$P

P$

&

$$P

&

$$P

&

$P

&

$P

P

%

.&

&

&

''

+L(*(M

要素へのアクセス

P

ST$

P

&

ST$

P

&

P

$P

&

$P

&

''

+L(*(/

変更子

P0

)%

P0

&

P0

)%

!

&

P0

)%

&

P0

P0

&

P0

P0

$P

$P

&

P0

!

$P

&

P0

!

&

P0

$P

&

<<

P0

<<

<<

&

P

&

P0

P0

&

P0

P0

$P

$P

&

P0

!

$P

&

P0

!

&

P0

$P

&

<<

P0

<<

<<

&

P0

$P

L

P0

&

P0

$P

L

P0

$P

+

$P

&

P0

$P

!

$P

&

P0

$P

!

&

P0

$P

$P

&

&

$P

&

<<

<<

<<

&

P0

$P

%

.

$P

%

&

&

&

P0

$P

L

$P

L

P0

&

P0

$P

L

$P

L

P0

$P

+

$P

+&

P0

$P

$P

L

!

$P

+&

P0

$P

$P

L

!

&


)

P0

$P

$P

L

$P

+

&

P0

L

+

P0

&

P0

L

+

!

$P

&

P0

L

+

!

&

P0

L

+

$P

&

<<

P0

L

+

<<

L

<<

+&

$P

!

$P

$P

%

.

&

P

0

&

''

+L(*(-

文字列操作

!

P

&

''

明示的

!

&

P

P

&

$P

P0

$P

%

.

&

$P

!

$P

$P

&

$P

!

$P

%

.

&

$P

$P

%

.

&

$P

P0

$P

%

&

$P

!

$P

$P

&

$P

!

$P

%

&

$P

$P

%

&

$P

PP

P0

$P

%

.

&

$P

PP

!

$P

$P

&

$P

PP

!

$P

%

.

&

$P

PP

$P

%

.

&

$P

PP

P0

$P

%

&

$P

PP

!

$P

$P

&

$P

PP

!

$P

%

&

$P

PP

$P

%

&

$P

PPP

P0

$P

%

.

&

$P

PPP

!

$P

$P

&

$P

PPP

!

$P

%

.

&

$P

PPP

$P

%

.

&

$P

PPP

P0

$P

%

&

$P

PPP

!

$P

$P

&

$P

PPP

!

$P

%

&

$P

PPP

$P

%

&

P

$P

%

.

$P

%

&

P0

&

$P

L

$P

L

P0

&

$P

L

$P

L

P0

$P

+

$P

+

&


!

&

$P

L

$P

L

!

&

$P

L

$P

L

!

$P

+

&

R&

R

のコンスト ラクタ,コピー 及び 代入

のすべてのコンストラクタでは,実引数

6

のコピーを使って,コンストラクタ 又は オブジェクト生存期間中のメンバ関数が記憶域の割付けを行う。

:)

,

:

効果  クラス

のオブジェクトを構築する。この関数の事後条件を

に示す。

60

の効果

要素

コピー可能な非空ポインタ。終端の

が付加してあってもよい。

$

未規定の値

/( (:  0 )

/( (:  0 )

(

'

(

'

,

(

:)

,

:

要件  

%

($

例外  

($

の場合,

を送出する。

効果  クラス

のオブジェクトを構築し ,

*

に示すとおり,文字列の初期値の実効長

を,

($

V

の小さいほうの値とする。第

の形式の場合,

6

の値には,

(

によってコピーされたものを使用する。

*

$

$

60

の効果

要素

割り付けられた,長さ

の領域の先頭要素へのポインタ。この領域には,

から

個の要素がコピーされる。

$

$

以上の値

$

(

'

(

:)

,

:

要件  

は,空ポインタであってはならない。更に,

でなければならない。

参考 この段落は,意図的に空にしてある。

効果  クラス

のオブジェクトを構築し,

に示すとおり,文字列の初期値を,先頭要素が

によっ

て示される長さ

型配列から決定する。

!7

$

7

60

の効果

要素

割り付けられた領域の先頭要素へのポインタ。この領域には,

先頭要素が

で指される配列の最初の

文字がコピーされる。

$

$

以上の値


*

$

(

:)

,

:

要件  

は,空ポインタであってはならない。

効果  クラス

のオブジェクトを構築し,

に示すとおり,文字列の初期値を,先頭要素が

によっ

て示される長さ

33

型配列から決定する。

!

60

の効果

要素

割り付けられた領域の先頭要素へのポインタ。この領域には,先

頭要素が

によって示される配列の最初の

33

個の文字がコピーされる。

$

33

$

以上の値

参考

33

を使用する。

'

(

(

:)

,

:

要件  

でなければならない。

参考 この段落は,意図的に空にしてある。

効果  クラス

のオブジェクトを構築し ,

に示すとおり,

個の全要素について文字様オブジェク

を繰り返すことによって,文字列の初期値を決定する。

$

60

の効果

要素

割り付けられた領域の先頭要素へのポインタ。各要素は

の値で初期化される。

$

$

以上の値

/

==0

==

(

==

(

:)

,

:

効果  

<<

が汎整数型の場合,次と同じ 。

P

P

$

P

P

P

そうでない場合,列に対する要件の表(

)に従って,

7,

の範囲内の値から文字列を構築する。

/( (:  0 )

,

/(( :  0)

効果  

!

が同じオブジェクトではない場合,

に従って

!

を変更する。

%

60

の効果

要素

先頭要素が

(

で指される配列のコピーの先頭要素を指すポインタ。

$

($

$

以上の値

!

が同じオブジェクトの場合には,何も起こらない。

返却値  

!

/( (:  0 )

,

$

返却値  

!

%

6

とする。

参考

33

を使用する。

/( (:  0 )

,

返却値  

!

%

6

L

とする。


の反復子

返却値  文字列中の先頭文字を参照する反復子とする。

返却値  文字列の末尾の次を指す反復子とする。

!

!

返却値  意味的に

と同等な反復子とする。

!

!

返却値  意味的に

と同等な反復子とする。

の容量に関する操作

'

'

返却値  文字列がその時点で保持している文字様オブジェクトの個数とする。

'

返却値  

$

とする。

'

'

返却値  文字列の最大長とする。

参考 コンテナに関する要件(

)を参照。

!

''

(

要件  

%

$

例外  

$

の場合,

を送出する。

効果  

!

の指す文字列の長さを次のとおりに変更する。

%

$

の場合,

!

を,長さが

の文字列であって,その要素が,元の文字列の要素を先頭から

順にコピーしたものである文字列で置き換える。

$

の場合,

!

の指す文字列を,長さが

の文字列であって,その要素が,元の文字列の要

素を先頭から順にコピーし ,残りの要素を

で埋めたものである文字列で置き換える。

!

''

効果  

$

'

返却値  文字列に割り付けられている記憶域の容量とする。

!

!'

,

メンバ関数

は,オブジェクト

に対し ,サイズの変更を通知するための指令とする。オブ

ジェクト

は,この指令に応じて記憶域割付けを管理することができる。

効果  

実行後,

の返す値は,

の実引数の値以上となる。

参考

より小さい値を実引数

とした

の呼出しは,実質的には,記憶域の縮小

要求となる。

%

$

の場合,現在の文字列長への縮小要求となる。


例外  

$

の場合,

を送出する。

!

効果  次の関数呼出しと同等。

&

返却値  

$

%%

.

とする。

の要素へのアクセス

*+'

*+'

返却値  

$

の場合,

ST

とする。

%%

$

の場合,

版では

とする。そ

れ以外の場合の動作は,未定義とする。

'

'

要件  

$

例外  

%

$

の場合,

を送出する。

返却値  

ST

とする。

#

の変更操作

#

33)

%

/( (:  0 )

%,

/( (:  0)

返却値  

とする。

/( (:  0 )

%,

$

返却値  

!

)%

 6

とする。

参考

33

を使用する。

/( (:  0 )

%,

返却値  

!

)%

 6

L

とする。

#

33

/( (:  0 )

/(0 )

返却値  

.

とする。

/( (:  0 )

/(0 )

(

'

(

'

要件  

%

($

例外  

($

の場合,

を送出する。

効果  

追加する文字列の実効長

を,

及び

($

V

のいずれか小さいほうとする。ここで,

$

%

V

の場合,

を送出する。そうでない場合,この関数は,

!

の指す文字列を次のとお

りの文字列に置き換える。

長さは,

$

)

とする。

先頭から

$

個の要素は,元の

!

の指す文字列をコピーしたもの。

残りの

個の要素は,

の指す文字列を

が指す要素から順にコピーしたもの。

は,

"

を用いるので,それが何か例外を送出するかもしれない。


返却値  

!

とする。

/( (:  0 )

$

(

'

返却値  

 6

とする。

/( (:  0 )

$

返却値  

 6

とする。

参考

33

を使用する。

/( (:  0 )

'

(

返却値  

 6

とする。

/

==0

)

==

(

==

返却値  

 6

とする。

!

4

効果  

$

L

に同等とする。

#

33

/( (:  0 )

/(0 )

返却値  

.

とする。

/( (:  0 )

/(0 )

(

'

(

'

要件  

%

($

例外  

($

の場合,

を送出する。

効果  

代入する文字列の実効長

を,

及び

($

V

のいずれか小さいほうとする。この関数は,

!

の指す文字列を,長さが

で,その内容は,

の指す文字列を

が指す要素から順にコピーした文字列に置

き換える。

返却値  

!

とする。

/( (:  0 )

$

(

'

返却値  

 6

とする。

/( (:  0 )

$

返却値  

6

とする。

参考

33

を使用する。

/( (:  0 )

'

(

返却値  

 6

とする。

/

==0

)

==

(

==

返却値  

 6

とする。


#

33

/( (:  0 )

'

(

/(( :  0)

返却値  

L

 .

とする。

/( (:  0 )

'

(

/(( :  0)

(

'

1(

'

要件  

L

%

$

かつ

+

%

($

でなければならない。

例外  

L

$

又は

+

($

の場合,

を送出する。

効果  

追加する文字列の実効長

を,

及び

($

V

+

のいずれか小さいほうとする。ここで,

$

%

V

の場合

を送出する。そうでない場合,この関数は,

!

の指す文字列を次のとお

りの文字列に置き換える。

長さは,

$

)

とする。

先頭から

L

個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

次の

個の要素は,

の指す文字列を

が指す要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列のうち,最初の

L

個に続くコピーされなかった要素を順にコ

ピーしたもの。

返却値  

!

とする。

/( (:  0 )

'

(

$

(

'

返却値  

 6

とする。

/( (:  0 )

'

(

$

返却値  

 6

とする。

参考

33

を使用する。

/( (:  0 )

'

(

'

(

返却値  

 6

とする。

(

7

要件  

は,

!

に対する有効な反復子でなければならない。

効果  

が参照する文字の前に,

のコピーを挿入する。

返却値  挿入された文字を指す反復子とする。

!

(

'

(

要件  

は,

!

に対する有効な反復子でなければならない。

効果  

が参照する文字の前に,

のコピーを

個挿入する。

/

==0

!

(

==

(

==

要件  

は,

!

に対する有効な反復子でなければならない。

7,

は,正しい範囲でなければならない。

効果  

V

に同等とする。


##

33

/( (:  0 )

'

,

(

'

,

要件  

%

$

例外  

$

の場合,

を送出する。

効果  削除する文字列の実効長

を,

及び

$

V

のいずれか小さいほうとする。この関数は,

!

の指す文字列を次のとおりの文字列に置き換える。

長さは,

$

V

とする。

先頭から

個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列のうち,

)

の位置にある要素から順にコピーしたもの。

返却値  

!

とする。

要件  

は,

!

に対する有効な反復子でなければならない。

効果  

が指す文字を削除する。

返却値  

削除以前に,

の直後に存在した文字を指す反復子とする。そのような要素が存在しない場合,

とする。

(

要件  

及び

は,

!

に対する有効な反復子であり,

7,

は正しい範囲でなければならない。

効果  

7,

の範囲に含まれる文字を削除する。

返却値  他の要素が削除される前に,

が指していた要素を指す反復子とする。そのような要素が存在しない場

合,

とする。

#(

33

/( (:  0 )

'

(

'

(

/( (:  0 )

返却値  

L

L

.

とする。

/( (:  0 )

'

(

'

(

/( (:  0 )

(

'

1(

'

1

要件  

L

%

$

かつ

+

%

($

でなければならない。

例外  

L

$

又は

+

($

の場合,

を送出する。

効果  削除する文字列の実効長

を,

L

及び

$

V

L

のいずれか小さいほうとする。挿入する文字列の

実効長

を,

+

及び

($

V

+

のいずれか小さいほうとする。

例外  

$

V

%

V

の場合,

を送出する。そうでない場合,この関数は,

!

の指す文字列を次のとおりの文字列に置き換える。

長さは,

$

V

)

とする。

先頭から

L

個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

次の

個の要素は,

の指す文字列を

+

が指す要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列の

L

)

で示される要素から順にコピーしたもの。

返却値  

!

とする。

/( (:  0 )

'

(

'

(

$

(

'

1

返却値  

 L

6

 +

とする。

/( (:  0 )

'

(

'

(

$


#

返却値  

L

 6

とする。

参考

33

を使用する。

/( (:  0 )

'

(

'

(

'

1(

返却値  

 L

6

+

とする。

)

(

1(

)

要件  

L

及び

+

は,

!

に対する有効な反復子であり,

7L,+

は,正しい範囲でなければならない。

効果  

!

の指す文字列を次のとおりの文字列に置き換える。

長さは,

$

V

+

V

L

)

($

とする。

先頭から

V

L

個の要素は,元の

!

の指す文字列を先頭要素から順にコピーしたもの。

続く

($

個の要素は,

の指す文字列を先頭要素から順にコピーしたもの。

残りの要素は,元の

!

の指す文字列のうち

+

で示される要素から順にコピーしたもの。

返却値  

!

とする。

参考 このメンバ関数呼出しの後,文字列の長さは,

($

V

+

V

L

となる。

)

(

1(

$

(

'

返却値  

L +

とする。

参考

文字列の長さは,

V

+

V

L

となる。

)

(

1(

$

返却値  

L +

とする。

参考

文字列の長さは,

33

V

+

V

L

となる。

33

を使用する。

)

(

1(

'

(

返却値  

L +

とする。

参考

文字列の長さは,

V

+

V

L

となる。

/

==0

)

(

1(

==

D(

==

D1

返却値  

L +

L +

とする。

参考

文字列の長さは,

+

V

L

V

+

V

L

となる。

#)

33

'

$

(

'

(

'

,

要件  

%

$

でなければならない。

例外  

$

の場合,

を送出する。

効果  

コピーされる文字列の実効長

を,

及び

$

V

のいずれか小さいほうとする。

の指す文字列

は,少なくとも

個の要素をもつ配列でなければならない。この関数は,

の指す文字列を,長さが

で,そ

の内容が,

!

の指す文字列のうち

で示される要素から順にコピーしたものに置き換える。この関数は,

指す文字列の最後に空オブジェクトを追加しない。

返却値  

とする。

#

33

!

/(  ( :  0)

効果  二つの文字列の内容を交換する。

要件  

この関数を実行した後では,

!

の内容は,実行前に

が保持していた内容となり,

の内容は,

!

保持していた内容となる。

計算量  定数時間。


(

(

の文字列操作

$

返却値  

長さが

$

)

L

の配列の先頭要素へのポインタとする。この配列の先頭から

$

個の要素は,

!

の指す文字列の対応する要素と等しい。最後の要素は,

によって示されるナル文字とする。

要件  

プログラムは,この配列内の要素を変更してはならない。クラス

の定値でないメンバ関数の実

行後は,それ以前にこの関数を使って得たポインタ値を有効なものと見なしてはならない。

$

返却値  

$

がゼロでない場合,先頭から

$

個の要素が

!

の指す文字列の対応する要素に等しいよう

な配列の先頭要素へのポインタとする。

$%%.

の場合,コピー可能な空ポインタでないポインタとする。

要件  

プログラムは,この配列内の要素を変更してはならない。クラス

の定値でないメンバ関数の実

行後は,それ以前にこの関数を使って得たポインタ値を有効なものと見なしてはならない。

返却値  文字列の構築に使われる

6

のオブジェクトとする。

(

33

'

/(( :  0)

(

'

,

効果  可能ならば,次の条件を満たす最小の値

を見つける。

%

かつ

)

($

%

$

となる。

の指す文字列内のすべての要素

/

について,

)/

%%

(

/

となる。

返却値  上記の

が見つかった場合,

とする。見つからなかった場合,

とする。

参考

33

を使う。

'

$

(

'

(

'

返却値  

6

とする。

'

$

(

'

,

返却値  

6

とする。

参考

33

を使う。

'

(

'

,

返却値  

6

L

とする。

(

33

'

/( (:  0)

(

'

,

効果  可能ならば,次の条件を満たす最大の値

を見つける。

%

かつ

)

($

%

$

となる。

の指す文字列内のすべての要素

/

について,

)/

%%

(

/

となる。

返却値  上記の

が見つかった場合,

とする。見つからなかった場合,

とする。

参考

33

を使う。

'

$

(

'

(

'

返却値  

 6

とする。

'

$

(

'

,

返却値  

 6

とする。

参考

33

を使う。

'

(

'

,

返却値  

 6

L

とする。


)

(

33

'

/(( :  0)

(

'

,

効果  可能ならば,次の条件を満たす最小の値

を見つける。

%

かつ

$

となる。

の指す文字列内のある要素

/

について,

%%

(

/

となる。

返却値  上記の

が見つかった場合,

とする。見つからなかった場合,

とする。

参考

33

を使う。

'

$

(

'

(

'

返却値  

6

とする。

'

$

(

'

,

返却値  

6

とする。

参考

33

を使う。

'

(

'

,

返却値  

6

L

とする。

(

33

'

/( (:   0)

(

'

,

効果  可能ならば,次の条件を満たす最大の値

を見つける。

%

かつ

$

となる。

の指す文字列内のある要素

/

について,

%%

(

/

となる。

返却値  上記の

が見つかった場合,

とする。見つからなかった場合,

とする。

参考

33

を使う。

'

$

(

'

(

'

返却値  

 6

とする。

'

$

(

'

,

返却値  

 6

とする。

参考

33

を使う。

'

(

'

,

返却値  

 6

L

とする。

(#

33

'

/(( :  0)

(

'

,

効果  可能ならば,次の条件を満たす最小の値

を見つける。

%

かつ

$

となる。

の指す文字列内のすべての要素

/

について,

%%

(

/

とならない。

返却値  上記の

が見つかった場合,

とする。見つからなかった場合,

とする。

参考

33

を使う。


'

$

(

'

(

'

返却値  

6

とする。

'

$

(

'

,

返却値  

6

とする。

参考

33

を使う。

'

(

'

,

返却値  

6

L

とする。

((

33

'

/( (:   0)

(

'

,

効果  可能ならば,次の条件を満たす最大の値

を見つける。

%

かつ

$

となる。

の指す文字列内のすべての要素

/

について,

%%

(

/

とならない。

返却値  上記の

が見つかった場合,

とする。そうでない場合,

とする。

参考

33

を使う。

'

$

(

'

(

'

返却値  

 6

とする。

'

$

(

'

,

返却値  

 6

とする。

参考

33

を使う。

'

(

'

,

返却値  

 6

L

とする。

()

33

/( (:  0

'

,

(

'

,

要件  

%

$

例外  

$

の場合,

を送出する。

効果  

コピーすべき文字列の実効長

を,

及び

$

V

の小さいほうとする。

返却値  

 6

)

とする。

(

33

/(( :  0)

効果  

比較すべき文字列の実効長

を,

$

及び

($

の小さいほうとして決定する。そして,二つの

文字列を

33

(

を呼び出すことによって,比較する。

返却値  比較の結果が非ゼロの場合,非ゼロの値とする。そうでない場合,表

に示す値とする。

の結果

条件

返却値

$

($

$

%%

($

$

($


*

'

(

'

(

/(( :  0)

返却値  次の値とする。

P

 6

!

L

L

(

'

(

'

(

/(( :  0)

(

'

1(

'

1

返却値  次の値とする。

P

 6

!

L

L

(

P

6

+

 +

$

返却値  

V

 6

とする。

'

(

'

(

$

返却値  次の値とする。

P

 6

!

 L

(

P

6

'

(

'

(

$(

'

1

返却値  次の値とする。

P

 6

!

 L

(

P

6

+

)

の非メンバ関数

)

)

/

(

(

:0

/( (:   0

%

/( (:  0)

(

/( (:  0)

返却値  

 6

(

とする。

/

(

(

:0

/( (:   0

%

$

(

/( (:  0)

返却値  

 6

)

とする。

参考

33

を使う。

/

(

(

:0

/( (:   0

%

(

/( (:  0)

返却値  

 6

L

)

とする。

/

(

(

:0

/( (:   0

%

/( (:  0)

(

$


返却値  

)

 6

とする。

参考

33

を使う。

/

(

(

:0

/( (:   0

%

/( (:  0)

(

返却値  

)

 6

L

とする。

)

%%

/

(

(

:0

,,

/( (:  0 )

(

/( (:  0 )

返却値  

(

%%

.

とする。

/

(

(

:0

,,

$

(

/( (:  0 )

返却値  

 6

%%

とする。

/

(

(

:0

,,

/( (:  0 )

(

$

返却値  

%%

 6

とする。

参考

33

を使う。

)

[%

/

(

(

:0

-,

/( (:  0 )

(

/( (:  0 )

返却値  

[

%%

とする。

/

(

(

:0

-,

$

(

/( (:  0 )

返却値  

 6

[%

とする。

/

(

(

:0

-,

/( (:  0 )

(

$

返却値  

[%

 6

とする。

参考

33

を使う。

)

/

(

(

:0

/

/( (:  0 )

(

/( (:  0 )

返却値  

(

.

とする。

/

(

(

:0

/

$

(

/( (:  0 )

返却値  

 6

とする。


/

(

(

:0

/

/( (:  0 )

(

$

返却値  

 6

とする。

)#

/

(

(

:0

0

/( (:  0 )

(

/( (:  0 )

返却値  

(

.

とする。

/

(

(

:0

0

$

(

/( (:  0 )

返却値  

 6

とする。

/

(

(

:0

0

/( (:  0 )

(

$

返却値  

 6

とする。

)(

%

/

(

(

:0

/,

/( (:  0 )

(

/( (:  0 )

返却値  

(

%

.

とする。

/

(

(

:0

/,

$

(

/( (:  0 )

返却値  

 6

%

とする。

/

(

(

:0

/,

/( (:  0 )

(

$

返却値  

%

 6

とする。

))

%

/

(

(

:0

0,

/( (:  0 )

(

/( (:  0 )

返却値  

(

%

.

とする。

/

(

(

:0

0,

$

(

/( (:  0 )

返却値  

 6

%

とする。

/

(

(

:0

0,

/( (:  0 )

(

$

返却値  

%

 6

とする。


)

/

(

(

:0

!

/(  (:  0 )

(

/( (:  0 )

返却値  

(

とする。

)*

挿入操作 及び 抽出操作

/

(

(

:0

/( 0 )

00/  (  0)

(

/(( :  0)

効果  次の手順で処理を行う。

クラス

のオブジェクト

を,次の形で構築されたものとして構築する。

P

3

3

が真のとき,

(

を呼び出して

から文字を抽出し ,それらを

に追加する。そ

の際,

(L

が呼び出されたものと見なす。

(

より大きい場合,追加される文字数の最大値

は,

(

とする。そうでない場

合,

は,

(

$

に等しい。次に示す条件のいずれかが発生するまで,文字の抽出 及び 追加が

行われる。

個の文字が格納された。

入力列がファイルの終わりに到達した。

次の入力文字

について,

 (

が真となった。

最後の文字( もしそれが存在するなら )が抽出された後,

(.

が呼ばれ,クラス

のオブジェクト

は,解体される。

この関数が文字を一つも抽出しなかった場合,

(33

を呼び 出す。これが ,

33

)

)を送出するかもしれない。

返却値  

とする。

/

(

(

:0

/(

0)

///  (

0)

(

/( (:  0 )

効果  次の手順で処理を行う。

クラス

のオブジェクト

を,次の形で構築されたものとして構築する。

P

3

3

が真のとき,

(V

(

を呼び出したのと同じ扱いで,文字を挿

入する。ここで,

は,

(

及び

($

のいずれか大きいほうとする。この際の詰め物は,

の段階

に示すとおりに処理される。

(.

を呼び出す。

の呼出しが失敗した場合,

(

33

を呼び出す。

返却値  

とする。

/

(

(

:0

/( 0 )

/ (  0)

(

/(( :  0)

(

効果  次の手順で処理を行う。

クラス

のオブジェクト

を,次の形で構築されたものとして構築する。

P

3

3


が真のとき,

(

を呼び出して

から文字を抽出し ,それを

の指す文字列に追

加する。その際,

(L

が呼び出されたものと見なす。

次に示す条件のいずれかが発生するまで,文字の抽出 及び 追加が行われる。

入力列がファイルの終わりに到達した(この場合,関数

は,

(

33

を呼び出す。)

次の入力文字

について,

%%

となった(この場合,

はストリームから取り出され

るが,文字列に追加されない。)

)

参照)

(

$

個の文字が抽出された(この場合,関数

は,

(

33

を呼ぶ。)

)

参照)

これらの条件は,上に示した順にテストされる。

最後の文字が読み込まれた後,クラス

のオブジェクト

は,解体される。

文字も読み込まれなかった場合,

(

33

が呼ばれる。これが

33

)

)を送出するかもしれない。

返却値  

とする。

/

(

(

:0

/( 0 )

/ (  0)

(

/(( :  0)

返却値  

(

Z

4

Z

とする。

ナル文字終端列ユーティリティ 表

#

(

)

及び

*

は,それぞれヘッダ

及び

( 多バイト変換)を規定する。

#

ヘッダ

の一覧

種別

名前  

関数

(

ヘッダ

の一覧

種別

名前

マクロ

I8B9

関数

)

ヘッダ

の一覧

種別

名前

マクロ

AG??

$

関数


ヘッダ

の一覧

種別

名前

マクロ

AG??

I7;6E

@65

I7;6E

@<A

I8B9

$

関数

*

ヘッダ

の一覧

種別

名前

マクロ

@"

7GE

@65

関数

これらのヘッダの内容は,標準

"

ライブラリのヘッダ

(

(

(

(

及び

(

に等しい。ただし ,次に述べる変更がある。

どのヘッダも,型

を定義してはならない(

参照)

関数呼出し情報

!

は,次の二つの宣言で置き換える。

!

!

&

!

!

&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

!

は,次の二つの宣言で置き換える。

!

!

L

!

+&

!

!

L

!

+&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

は,次の二つの宣言で置き換える。

!

!

&

!

!

&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

!

は,次の二つの宣言で置き換える。

!

!

L

!

+&

!

!

L

!

+&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

$

は,次の二つの宣言で置き換える。

!

!

$P

&

!

!

$P

&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

は,次の二つの宣言で置き換える。

P!

P!

P

&

P!

P!

P

&


#

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

!

は,次の二つの宣言で置き換える。

P!

P!

L

P!

+&

P!

P!

L

P!

+&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

は,次の二つの宣言で置き換える。

P!

P!

P

&

P!

P!

P

&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

!

は,次の二つの宣言で置き換える。

P!

P!

L

P!

+&

P!

P!

L

P!

+&

これらの動作は,元の宣言と同じとする。

関数呼出し情報

!

$

は,次の二つの宣言で置き換える。

P!

P!

P

$P

&

P!

P!

P

$P

&

これらの動作は,元の宣言と同じとする。

参照  

6

)

))

)

及び

)

6

追補

#

及び

(

現地化ライブラリ

では,

"##

プログラムにおいて文化的な違いをカプセル化しプログラムの移植性を向

上させるために用いられる部品群について規定する。現地化を行う現地特性の機能を次に示す。

文字のクラス分け

文字列照合順序

数値,金額,日時などの書式指定 及び 構文解析

メッセージ検索

で規定する項目を

#

に示す。

#

 現地化ライブラリの要約

箇条

ヘッダ

現地特性

標準

カテゴ リ

"

ライブラリの現地特性

現地特性

ヘッダ

の一覧

Q

''

++(L(L

現地特性

&

9

90

P

0&

9

P

0

&

''

++(L(*

便利なインタフェース

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&


(

0

&

0

&

''

++(+(L

及び

++(L(*

P&

&

&

''

特殊化

P&

P

&

''

特殊化

P&

&

P&

''

++(+(+

及び

++(+(*

数値

<<

P&

B<

P&

&

P&

''

++(+(M

文字列照合順序

&

P&

''

++(+(/

日付 及び 時間

P&

<<

P&

<<

PP&

B<

P&

B<

PP&

''

++(+(-

金額

P&

<<

P&

B<

P&

<

&

<

P

&

''

++(+(,

メッセージ検索

P&

&

P&

R

ヘッダ

では,現地特性固有の情報をカプセル化し操作するための,クラスの定義 及び 関数の宣言を行っ

ている。

クラス

Q

Q

3

''

&

&

&

''

ここで代入されている値は,説明のためだけ

%

.

%

..L.

%

..+.

%

..M.

%

..N.

%

.L..

%

.+..

%

1

1

1

1

1

&

''

構築,複製 及び 解体

では,型名

$

は,

で定義された不完全型とする。


)

&

0

&

!

P&

0

!

P

&

9

0

9!

&

0

0

&

X

&

''

非仮想関数

0

%

0

&

9

0

&

''

に対する操作

P

&

%%

0

&

[%

0

&

6

P

 6

0

L

P

 6

0

+

&

''

大域的

オブジェクト

0&

0

&

R&

R

現地特性クラス

は,型安全で多相的な特性項目の集合を,特性項目を表す型

を索引として実現

する。すなわち,特性項目は,単なるクラス・インタフェースとしての役割と,現地特性中の一群の特性項目に対す

る索引としての役割との二重の役割を果たす。

現地特性がもつ特性項目にアクセスするには,関数テンプレート

又は

を用いる。

入出力ストリームの

は,例えば次のように実装される。

P

0

P

0

#

Q

P

33

&

Q

P33

%

.&

&

(

&

PP

P

((

(

0

ZZ&

(&

''

例外が送出されるかもしれない

R

&

R

の呼出しでは,型実引数

によって特性項目が選択され,この型の全メンバが使用可

能になる。

が現地特性に存在しない特性項目を指定している場合,この関数は,標準の例外

を送出す

る。

"##

プログラムは,関数テンプレート

を使って,ある現地特性が特定の特性項目を実装

しているかど うかを調べることができる。現地特性に利用者定義の特性項目を取り込ませ,標準の特性項目と同様に

使用することも可能である(

参照)

参考

現地特性がもつすべての機能には,

を介してアクセスする。ただし ,次

に示す例外がある。

メンバ演算子テンプレート

7  60

7  60

提供されていて,文字列照合順序のために,標準集合を指定する述語実引数として,現地特性

を使うことができる。

など の従来からある

の関数に対応した使いやすい大域的イン

タフェースが用意されており,

"##

プ ログ ラムでは,現地特性オブジェクト

を使って,

$

の呼出しにおいて,ストリームが暗黙のうちに

.$%

? /

に変換されることに注意せよ。


として呼び出すことができる(これによって,既存の抽出子(

)(

)の

格上げがしやすくなる。)

の呼出しによって現地特性オブジェクトから得た特性項目への参照は,その特性項目を参照している

現地特性オブジェクトが存在する限り使用することができ,そのメンバ関数の結果をキャッシュして再利用すること

ができる。

現地特性の特性項目メンバ関数は,入出力ストリームの挿入子 若しくは 抽出子の呼出し,又は ストリームバッファ

のメンバ関数の呼出しの最中に何度呼び出されたとしても,同じ値を返さなければならない。

参考 したがって,そのような返却値は,現地特性の特性項目メンバ関数を再び呼ばずに使用することができ

る。また,入出力ストリームクラスのメンバ関数が,自ら

を呼び出したのではこの保証がない

( 特に規定する場合を除く。)ことになる。

現地特性が名前をもつのは,次の場合だけとする。

その現地特性が,現地特性名を表す文字列( 例えば ,

YCBF<5Y

)から構築された。

その現地特性が,名前をもつ二つの現地特性の構成要素から構築された。

そうでない現地特性は名前をもたない。名前をもつ現地特性ど うしは,等価性の比較ができる。名前をもたない現

地特性は,自分自身のコピーとの間でだけ等価となる。名前をもたない現地特性の場合,

33

は,

Y!Y

返す。

のもつ型

33

有効な

の値には,

のビットマスク要素としての

及び

がある。更に,

のメンバ

が定義してあり,次の式が

となる。

1

1

1

1

1

1

%%

更に,有効な二つの

値に対して,演算子

1

及び 演算子

0

を適用した結果の値も有効とする。これらは,

それぞれ

の和集合 及び 積集合を表す。

の メンバ関数が 型

の実引数をもつ場合,その実引数には ,

とし て有効な値,又は

で定義されている

?7

JC8

など の定数値を与えなければ ならない。こうし た

の値は,現地

特性のカテゴ リの集団を同定する。現地特性のカテゴ リは,それぞれ,現地特性の特性項目の集団を同定する。その

集団は,それぞれ,少なくとも

#

に示す特性項目を含んでいなければならない。

#

 現地特性カテゴリ 及び その特性項目

カテゴ リ

含まれる特性項目

 

は,どんな現地特性

及び 特性項目

に対しても,次の二つの条件がともに成

り立てば

となる。

が,構築されたものか,

33

によって返されたかのいずれかである。

が,標準のカテゴ リのメンバである。

33

の実引数をもつ

のメンバ関数は,その実引数に対応する特性項目の集合に対して操作

を行う。

処理系は,

#

に示したテンプレートの具現化を提供しなければならない。


*

#

 必要な具現化

カテゴ リ

含まれる特性項目

 

 <

 <

7 <<

7 B<

7 <<

7 B<

 <<

 <

<

 B<

 B<

 B<

 B

<

 B<

 B<

特性項目

及び

のメンバの実装が

を呼び出すのは,次の二

つの条件を満たす場合だけとする。

特性項目

が,

型である。

現地特性

が,これらの関数の

0

実引数に対して

メンバを呼ぶことによって得られた

値である。

特性項目の宣言では,

<<

又は

B<

という名前のテンプレート仮引数は,それぞれ入力

反復子 又は 出力反復子の要件を満足するすべての具現化の集合を表す(

参照)。

7

という名前のテンプレート

仮引数は,文字の要件を満足するすべての具現化の集合を表す。この場合,そのような文字を用いた任意の入出力ス

トリーム要素が具現化可能でなければならない。

<

という名前のテンプレート仮引数は,

%

型の仮

引数として可能なすべての具現化の集合を表す。

クラス

33

Q

33

Q

3

$P

%

.&

X&

3

0&

''

定義されない

%

0&

''

定義されない

R&

R

クラス

は,現地特性の特性項目に対する基底クラスとする。あるクラスが特性項目

であるのは,そ

のクラスが他の特性項目から公開派生している場合,又は そのクラスが

33

から派生し ,かつ次の形の

公開アクセス可能な宣言を含む場合とする。

333333

&

では,特性項目を要求するテンプレート仮引数は,

9

という名前で宣言される。現地特性の関数に,

( 明示

的に 又は 導出によって )特性項目であることが要求されるテンプレート仮引数として,特性項目でない型を渡すプ

ログラムは,不適格とする。

コンストラクタの実引数

は,生存期間の管理に用いられる。

%%

.

の場合,その特性項目を含む最後の

オブジェクトが解体されたときに,処理系が

33

!

を実行する。ただし ,

はその特性項目へのポインタとする。

%%

L

の場合,その特性項目を処理系が解体することはない。

これは,要件すべてを尽くしている。他の要件は存在しない。したがって,特性項目クラスは,公開の,コピーコンストラクタ,代入

演算子,省略時コンストラクタ,デストラクタなどをもつ必要がない。


で定義する特性項目のコンストラクタは,この実引数をとり,

基底クラスのコンストラクタに渡す。

で定義するすべての単一実引数のコンストラクタは,自動的な型変換を避けるため

と定義される。

標準の特性項目の中には,それから派生した

:E

E

E

;

という名前の標準クラスが存在するものがある。これ

は,

!

に同じ名前を与えることによって構築される現地特性の特性項目と同じ機能をもつ仮想

関数を実装している。このような特性項目は,

!

の実引数(これは現地特性名を表す。)及び 実引数

( これは基底クラスのコンストラクタに渡される。)をもつコンストラクタを提供する。

E

E

E

版の特性項目が

存在しない場合,基底クラスは,名前付きの現地特性の機能を,他の特性項目を参照することによって実現する。

クラス

33

Q

33

Q

3

&

3

%

0&

''

定義されない

0&

''

定義されない

R&

R

クラス

33

は,現地特性における特性項目インタフェースの識別機能を提供する。これは,検索時の索引

としても,初期化のカプセル化にも用いられる。

参考

特性項目は,静的コンストラクタの実行中にも入出力ストリームによって用いられるので,それの静的

初期化をプログラムの中で行うわけにはいかない。

が採用し うる初期化戦略の一つとして,特性

項目のインスタンスが現地特性に組み込まれる最初の時点で,各特性項目のメンバ

を初期化するとい

う方法がある。これは,コンストラクタの実行前に,静的記憶域がゼロに初期化されること(

(

)にだ

け依存している。

のコンスト ラクタ 及び デスト ラクタ

省略時のコンストラクタ。現在の大域的現地特性のスナップショット。

効果  以前に

33

0

が呼ばれたことがある場合,その最後の呼出しのときに渡された実引数の

コピーを構築する。そうでない場合,結果として得られる特性項目は,

33

の結果と同一の機能の仮

想関数をもつ。

参考 このコンストラクタは,一般に,

0

の実引数をもつ関数の省略時実引数として用いられる。

)

効果  

をコピーして現地特性を構築する。

)

,

)

効果  

のコピーを構築し ,現在の値と置き換える。

返却値  

!

$

効果  標準

"

現地特性の名前( 例えば

YCBF<5Y

)を用いて現地特性を構築する。結果として得られる現地特性は,そ

の現地特性名に対して定義されている機能を実装する。

例外  実引数が有効でないかナルの場合,

を送出する。

備考

有効な文字列の値は,

Y7Y

YY

及び 処理系定義の値のいずれかとする。

)

(

$

(

効果  

をコピーした現地特性を構築する。ただし,実引数

で指定された特性項目は,

と同じ機能をもつ。

例外  実引数が有効でないかナルの場合,

を送出する。

参考

構築される現地特性は,

が名前をもつときかつそのときに限り名前をもつ。


/

>0

)

(

>$

効果  

実引数から,型

9

以外の全特性項目を引き継いだ現地特性を作成する。次に,第

実引数を残りの特

性項目として取り込む。

がナルの場合,構築されるオブジェクトは,

のコピーになる。

参考

構築された現地特性は名前をもたない。

)

(

)

(

効果  

を実装する特性項目を除き,第

実引数から全特性項目を引き継いだ現地特性を構築する。

を実装

する特性項目については,第

実引数の特性項目を引き継ぐ。

参考

構築された現地特性は,最初の二つの実引数が名前をもっているとき,かつそのときに限り名前をもつ。

.

効果  例外を送出しない,非仮想のデストラクタ。

のメンバ

/

>0

)

効果  

!

のもつすべての特性項目を引き継いだ現地特性を構築する。ただし,

9

によって指定される特性項

目は,

の特性項目を引き継ぐ。

返却値  新たに構築された現地特性。

例外  

9

が偽のとき,

を送出する。

参考

構築された現地特性は,名前をもたない。

/0

返却値  

!

が名前をもつ場合,それを返す。そうでない場合,文字列

Y!Y

を返す。

!

が名前をもつ場合,

(

は,

!

と等価とする。得られる文字列の内容は,処理系依存とする。

の演算子

,,

)

返却値  次のいずれかの場合,

を返す。

比較対象の現地特性が,同一オブジェクトである場合

一方が他方のコピーである場合

― ど ちらの現地特性も名前をもち,その名前が等しい場合

それ以外の場合,

を返す。

-,

)

返却値  

[!

%%

/

(

(

:0

/( (:   0)

(

/( (:   0)

1

効果  二つの文字列を,特性項目

に従って比較する。

参考 このメンバ演算子テンプレートは(したがって

自身も ),文字列に対して適用される比較判定

テンプレート実引数(

#

)の要件を満たす。

返却値  次に示す式の結果。

P

!(

L(

L()

L($

+(

+()

+($

.&

文字列のベクトル

を,現地特性

の文字列照合順序に従って整列するには,次のとおりに書けばよい

#

及び

参照)

33(

(

&


#

の静的メンバ

)

実引数を大域的現地特性として設定する。

効果  

以後のコンストラクタ

の呼出しは,その実引数のコピーを返すことになる。その実引数が名前をもっ

ていれば ,次を実行する。

33?

7P

6??

((P

&

そうでない場合,

"

現地特性に対する影響は,処理系定義とする。

33

以外のライブラリ関数は,

の返す値に影響を与えない。

返却値  以前の

の値。

0

&

"

現地特性。

返却値  旧来の

"

言語限定の現地特性を実装する現地特性。これは,

Y7Y

の値と同等とする。

参考 この現地特性,その特性項目 及び それらのメンバ関数は,時間がたっても変わらない。

の大域的要素

/

>0

>)

)

要件  

9

は,その定義に公開静的メンバ

を含む特性項目クラスでなければならない(

返却値  

が対応する特性項目をもつ場合,その特性項目に対する参照。

例外  

9

が偽の場合,

を送出する。

備考

返された参照は,

のコピーが存在する限り有効とする。

/

>0

)

返却値  

が要求された特性項目をもつとき真,それ以外のとき偽 。

便利なインタフェース

文字の分類

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&

0

&

これらの関数

は,次に示す式の値を返却値として返す。

P

(P

3

3

ここで,

は,その関数に対応する

33

の値とする(

参照)

文字変換

/

0

(

)

返却値  

(

/

0

(

)

返却値  

(

ループの中で用いられる場合,

特性項目をキャッシュしてそれを直接使うか,

のベクトル形式を使うかするほ

うがより高速に扱える。


標準現地特性カテゴリ

それぞれの標準カテゴ リは,一群の特性項目からなる。それらの内の幾つかは,標準

又は 利用者定義の入出力ストリーム演算子

及び

(それぞれ,メンバ関数

及び

に同じ 。)の中で,

データの書式制御 及び 構文解析に用いられる。そのようなメンバ関数は,

0

を実引数とする。この実引数

はメンバ

及び

をもち,対応するデータの書式を制御する。他の特性項目を使用す

ることが必要な関数は,

メンバ関数を呼んでそこに浸透している現地特性を取り出す。書式制御用特性項

目は,必要に応じて,文字型の実引数

を使用して必要な文字幅を埋める。

メンバ

は,エラーを報告するための機能をもたない( 実引数

B<

における失敗は,返された反

復子から取り出す必要がある。)

。メンバ

は,

330

実引数を

個もつが,その値を無視する。

ただし ,構文解析エラーが発生した場合は,

33

をセットする。

カテゴリ

Q

P

Q

3

Q

''

示してある数値は解説用

%L.

%LL

%L+

%L*

%LM

%L/

%L-

%L,

%LN

%1

%1

R&

R&

R

は,ビットマスク型とする。

クラステンプレート

3

33

P

Q

3

P&

$P

%

.&

&

!

!

!

!

&

!

P

!

!

&

!

P

!

!

&

&

!

!

!

&

&

!

!

!

&

&

!

!

!

!

&

&

!

!

!

!

&

33

&

3

X&

''

仮想デストラクタ

P

&

!

P

!

!

!

&

!

PP

!

!

&

!

PP

!

!

&

P

&

!

P

!

!

&

P

&

!

P

!

!

&

P

&

!

P

!

!

!

&

P

&


!

P

!

!

!

&

R&

クラス

は,

"

ライブラリの

の機能をカプセル化している。

のメンバは,入力の構文解

析時に

を用いる。

#

が要求する具現化,特に

及び

は,処理系の現地文字集合に見合う文字分類

機能を実装する。

のメンバ

4

(

$

$

(

$

(

4$

!

返却値  

又は

$

4

(

$

(

$

返却値  

$

4

(

$

(

$

返却値  

$

$

(

$

返却値  

又は

$

$

(

$

返却値  

又は

$

$

(

$

(

$

返却値  

又は

(

$

$

(

$(

(

$

返却値  

又は

の仮想関数

4

(

$

$

(

$

(

4$

!

効果  

文字 又は 文字の列を分類する。実引数の文字について,型

33

の値

が何であるかを調べる。

番目の形式では,

%

0

を満たす各

!

について,型

33

の値

SVT

格納する。

返却値  

最初の形式は,

0

[%

.

の値を返す。すなわち,文字が指定された性質をもつとき,

を返す。

番目の形式は,

を返す。

$

4

(

$

(

$

効果  

バッファ内の文字で,分類

に合致する文字の位置を求める。

返却値  区間

7,

内で,

!

を返す最小のポインタ値

を返す。そのような

が存在しない

場合は

を返す。

$

4

(

$

(

$


#

効果  

バッファ内の文字で,分類

を合致しない文字の位置を求める。

返却値  

区間

7,

内で,

!

を返す最小のポインタ値

を返す。そのような

が存在しない

場合は

を返す。

$

$

(

$

効果  文字 又は 文字の列を大文字に変換する。

番目の形式では,区間

7,

内の各文字

!

について,対応

する大文字があればその大文字に置き換える。

返却値  最初の形式では,対応する大文字が存在すればその文字を返し,存在しなければ実引数を返す。

番目の形

式は,

を返す。

$

$

(

$

効果  

文字を小文字に変換する。

番目の形式では,区間

7,

内の各

に対し,文字

!

に対応する小文字が

存在すれば,

!

をその小文字に置き換える。

返却値  最初の形式では,対応する小文字が存在すればその文字を返し,存在しなければ実引数を返す。

番目の形

式は,

を返す。

$

$

(

$

(

$

効果  

最も単純かつ妥当な変換方法を適用し,

型の値 又は

型の値の列を,型

の値 又は 型

値の列に変換する。

一意的な変換が要求されるのは,基本文字集合(

)に含まれる文字だけとする。

の特性項目

及び 有効な

33

をもつ任意の名前付き

カテゴ リについては,次の式は,

となる。

11

[(

P

番目の形式は,区間

7,

内の各文字(

!

)を変換し ,その結果を

SVT

に格納する。

返却値  最初の形式は,変換後の値を返す。

番目の形式は,

を返す。

(

$

$

(

$

(

(

$

効果  

最も単純かつ妥当な変換方法を適用し,型

の値 又は 型

の値の列を,

型の値 又は

型の

値の列に変換する。

及び

は,基本文字集合(

)に含まれる文字

に対し,次の条件を満足し

なければならない。

PP

 .

%%

の特性項目

及び 有効な

33

をもつ任意の名前付き

カテゴ リについ

ては,次の式は,

となる(

を返す場合を除く。)

11

[(

P

更に,数字の文字

に対しては,

 V

Z.Z

を評価した結果は,その数字が表す数値となる。

番目の形式は,区間

7,

内の各

に対して文字

!

を変換した結果( 単純な変換が用意されていない場合は

)を

SVT

に格納する。

返却値  

最初の形式は,変換後の値を返す。ただし,変換が用意されていない場合,

を返す。

番目の形式は,

を返す。

&

&

の文字型実引数は,文字列定数から得られた値を受け取って現地特性のエンコーデ ィングに変換することを意図している。

すなわち,変換された文字は,

が属さないような文字分類には属さない。


(

クラステンプレート

Q

P

3

Q

3

33

&

P

!

$P

%

.&

3

XP&

''

仮想デストラクタ

P

&

!

P

!

!

!

&

!

PP

!

!

&

!

PP

!

!

&

P

&

!

P

!

!

&

P

&

!

P

!

!

&

P

&

!

P

!

!

!

&

P

&

!

P

!

!

!

&

R&

R

の特殊化

Q

3

33

P

Q

3

P&

!

%

.

%

$P

%

.&

&

!

!

!

!

&

!

P

!

!

&

!

P

!

!

&

&

!

!

!

&

&

!

!

!

&

&

!

!

!

!

&

&

!

!

!

!

&

33

&

$P

P$

%

処理系定義

&

3

!

&

!

P

&

X&

''

仮想デストラクタ


)

P

&

!

P!

!

&

P

&

!

P!

!

&

P

&

!

P

!

!

!

&

P

&

!

P

!

!

!

&

R&

R

特殊化

は,

型に対するメンバ関数を

で実装するために提供されている。

メンバ

$

の値は,処理系定義とする。ただし,少なくとも

以上でなければならない。

のデスト ラクタ

.

効果  

コンストラクタの第

実引数が非ゼロで,第

実引数が真として構築されたオブジェクトの場合,

S

T

を実行する。

のメンバ

ここでのメンバに関する記述では,

%

$

であるどんな

 !3

型の値

に対しても,

ST

は,配列の検索を実行するまでもなく処理系定義の値(おそらくは

ごとに

異なる値)をもつと仮定する。

4$

,

(

,

(

'

,

事前条件  

は,

であるか

$

個以上の要素をもつ配列であるかのいずれかでなければならない。

効果  実引数

を基底クラスのコンストラクタに渡す。

4

(

$

$

(

$

(

4$

!

効果  

番目の形式では,区間

7,

内の全

に対し,

S

!T

の値を

SVT

代入する。

返却値  最初の形式は,

S

T

0

を返す。

番目の形式は,

を返す。

$

4

(

$

(

$

返却値  区間

7,

内で,次の式が

となる最小の

を返す。

S

!

T

0

$

4

(

$

(

$

返却値  区間

7,

内で,次の式が

となる最小の

を返す。

S

!

T

0

$

$

(

$

特殊化が提供されているのは,

?

だけである。

$4&

?

及び

4&

?

には提供されていない。この特殊化は,この規

格で規定してあるから,処理系に細目まで自由度がない。その理由は,この特殊化が

?

に対して導出されたインタフェース

に影響を与えるからである。


返却値  第

の形式では

。第

の形式では

$

$

(

$

返却値  第

の形式では

。第

の形式では

$

$

(

$

(

$

返却値  第

の形式では

。第

の形式では

(

E$$E

$

$

(

$

(

E$$E(

$

返却値  第

の形式では

。第

の形式では

4$

返却値  コンストラクタの第

実引数を非ゼロとして構築されている場合,その第

実引数の値。そうでない場合,

の静的メンバ

4$

返却値  

Y7Y

現地特性において文字の分類に使われ,

$

個の要素をもつ配列の先頭要素へのポインタ。

の仮想関数

$

$

(

$

$

$

(

$

!

!

$

$

(

$

(

$

!

(

!

$

$

(

$

(

(

$

効果  

これらの関数は,クラステンプレート

)における同じ名前のメンバと同等とする。

クラス

Q

P

3

Q

3

P

!

$P

%

.&

3

XP&

''

仮想デストラクタ

P

&

!

P!

!

&

P

&

!

P!

!

&

P

&

!

P

!

!

!

&

P

&

!

P

!


*

!

!

&

R&

R

#

クラステンプレート

Q

P

Q

3

Q

R&

R&

3

33

P

Q

3

P&

P&

P&

$P

%

.&

0

!

!

P

!0

P

!

!

P

!0

P

&

0

!

!

P

!0

P

&

0

!

!

P

!0

P

!

!

P

!0

P

&

&

P

&

0

!

!

$P

&

P

&

33

&

3

X&

''

仮想デストラクタ

P0

!

!

P

!0

P

!

!

P

!0

P

&

P0

!

!

P

!0

P

!

!

P

!0

P

&

P

0

!

!

P

!0

P

&

P

&

PP

&

P0

!

!

$P

&

PP

&

R&

R

クラス

は,あるコード セットから別のコード セットへの変換に用いる。変

換の例としては,ワイド 文字からマルチバイト文字への変換,

.

3

(."

のようなワイド 文字間での変換など

がある。

実引数

によって,マッピングが行われる一対のコード セットを選択する。

#

)が要求する具現,すなわち

 

及び

は,処理系定義の既存の文字集合の変換を行う。

は,変換を全く行わない,退化した変換を実装する。

 

は,ナロー文字 及び ワ

イド 文字に対する処理系が本据とする文字集合間の変換を行う。

に関する具現化は,ライブラリ実装者が

定めるエンコーデ ィング間の変換を行う。他のエンコーデ ィングについては,利用者定義の

型に対する特殊


化によって変換することができる。

オブジェクトは,特殊化されたメンバ

又は

との間で情報を

やりとりするのに使用する状態をもつことができる。

#

のメンバ

)

(

$

(

$

(

$)

(

$

(

$

(

$)

返却値  

)

(

$

(

$

(

$)

返却値  

)

(

$

(

$

(

$)

(

$

(

$

(

$)

返却値  

返却値  

!

返却値  

)

(

$

(

$

(

'

返却値  

返却値  

#

の仮想関数

)

(

$

(

$

(

$)

(

$

(

$

(

$)

)

(

$

(

$

(

$)

(

$

(

$

(

$)

事前条件  

%

00

%

は,適切に定義された式であって,その値が

でなければな

らない。

は,列の先頭での呼出しでは,初期化されていなければならない。列の先頭以外での呼出しでは,列

内の先行する文字をこの関数で変換したときの結果に等しくなければならない。

効果  変換元として与えられた区間

7,

の文字を変換し ,

から始まる連続した位置に格納する。変

換される文字数は

以下とし ,格納される文字数は

以下とする。変換不可能な文

字が現れた場合は,動作を停止する。この関数は,

及び

を,正しく変換が行われた最後の要素の

次の要素を指すようにする。この関数が

を返す場合,

とは同一の型であり,変換された

列が入力列

7,

に等しくなる。この場合,

は,

に等しく設定され,

の値は変化しな

い。更に,

7,

内の値も変化しない。

備考

実引数

に対する操作は,未規定とする。

参考

この実引数を使っても差し 支えない。例えば ,シフト状態の保持,変換オプションの指定,

シークオフセットのキャッシュの同定などが考えられる。

返却値  表

#

に示す列挙型の値。


#

の値

意味

変換を完了した。

変換元に含まれる文字の一部を変換した。

7,

中に,変換不可能な文字が存在した。

とが同一の型であり,入力列と変換後の列とに違うところがない。

%%

である場合に結果として

の結果が返されたときは,次のいずれかを意味する。

変換先の列が,変換結果のすべてを納めきれなかった。

更に変換先要素を作り出すには,変換元要素を追加する必要がある。

)

(

$

(

$

(

$)

効果  現在の

が与えられたとき,現在の列を終了するために追加する必要のある文字を

から始

まる要素に書き込む。

#

)で要求される具現化,すなわち

 

及び

は,文字を格納しない。格納する要素数は,

V

を超えない。

ポインタは,常に,最後に格納された要素の次の要素を指す。

返却値  表

#

に示す列挙型の値。

#

の値

意味

列を終了した。

列を終了するには,より多くの文字を必要とする。

が不正な値である。

与えられた

では,終了処理が不要である。

は,

を返す。

返却値  

の列のエンコーデ ィングが状態依存の場合,

を返す。そうでい場合,内部文字

文字を作り出

すのに必要な

の文字数を返す。その文字数が定数でなければ

.

を返す。

!

返却値  

及び

が,すべての有効な実引数に対して

を返す場合,

を返す。

は,

を返す。

)

(

$

(

$

(

'

事前条件  

%

は,適切に定義された式で,その値が

でなければならない。列の先頭では,

は初期化されていなければならない。そうでなければ ,

は列内の先行する文字を変換した結果に等しく

なければならない。

効果  

実引数

に対する効果は,少なくとも

個の要素をもつバッファを指す

に対し,

を呼び出したのと同等とする。

返却値  

V

。ここで,

は,区間

7,

の内にあって,区間

7,

に含まれる値の列が

文字以下の型

の完全な文字( 列)を表す最大の値とする。

#

)で

要求される具現化,すなわち,

及び

は,

又は

V

の小さいほうを返す。

典型的には,シフト状態を

に戻すために必要とされる文字。

&4

を返す場合,単一の

文字を生成するのに,

(

4?

よりも多くの

(

要素を消費することが

ある。更に,最後の

文字を生成した

(

列の後に,追加の

(

要素が現れることもある。


返却値  

L

が,任意の有効な区間

7,

及び

の値

に対して返す値の最大値。具現化

33

は,

を返す。

(

クラステンプレート

Q

P

3

Q

3

P

!

$P

%

.&

3

XP

&

''

仮想デストラクタ

P0

!

!

P

!0

P

!

!

P

!0

P

&

P0

!

!

P

!0

P

!

!

P

!0

P

&

P

0

!

!

P

!0

P

&

P

&

PP

&

P0

!

!

$P

&

P

0

!

!

P

!0

P

&

PP

&

R&

R

数値カテゴリ

クラス

及び

は,数値の書式制御 及び 構文解析を行う。いくつかの数

値型については仮想関数が用意されている。処理系は,より小さな型の抽出処理を,より大きな型の抽出処理に委託

することもできる(そうすることが要求されるわけではない。)

で規定する

及び

のメンバ関数に関するすべての仕様は,

#

及び

#

)で

要求された具現化,すなわち,

7 <<

及び

7 B<

についてだけ適用する。これらの具現化は,書式制御仕様

)に関して

0

の実引数を参照する。更に,数値に関する( 理想的にはすべての )区切り記号の好みを

同定するための

特性項目, 及び 文字の分類を行うための

特性項目について,それに浸透して

いる現地特性を参照する。

抽出子 及び 挿入子のメンバは,

及び

のメンバ関数を用いて,書式制御 及び 構文解析を行

う(

)(

及び

)(#

参照)

クラステンプレート

Q

<<

%

P

P

3

33

Q

3

P&

<<

P&

P$P

%

.&

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

0

&

P

P

P

P0

6+

を(例えば )

$4&

?

に正しく構文解析するには,委託する前に,対応するメンバ

4

が少なくとも符号を抽出して

おかなければならない。


P33

0

0

&

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

!0

&

33

&

3

XP&

''

仮想デストラクタ

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

!0

&

R&

R

特性項目

は,入力ストリームなどの入力列での数値を構文解析するのに用いる。

のメンバ

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

!$)

!

返却値  

の仮想関数


(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

)

!

(

(

)

(

&&)

(

!$)

!

効果  

から文字を読み込み,それらを

(

及び

に従って解釈する。ここで

は,

(

の結果とする。エラーが発

生した場合,

は変更されない。エラーが発生しなかった場合,

には,結果として得た値が格納される。

この操作は,次に示す

段階に分かれる。

段階

変換指定子を決定する。

段階

から文字を取り出し,段階

で決定した変換指定子に従って,対応する

値を決定する。

段階

結果を格納する。

各段階の詳細を次に示す。

段階

ローカル変数を,次のとおり初期化する。

%

(&

%

0

P33

&

%

0

P33

&

%

0

P33

&

汎整数型に変換する場合は,汎整数変換指定子を

##

に従って決定する。表中の各行の順序には意味がある。す

なわち,条件が真となる最初の行を適用して,指定子を決定する。

##

 汎整数変換

状態

等価な

の指定

%%

U

%%

U5

%%

.

U

符号付き汎整数型

U

符号なし汎整数型

U

浮動小数点型への変換では,変換指定子は

U

とする。

!

への変換では,変換指定子は

U

とする。

必要があれば ,

#(

に従って変数長変更子を追加する。

#(

 変数長変更子

変数長変更子

?


#

段階

%%

の場合,段階

は終了する。そうでなければ ,

から型

の文字を

文字取り出し ,ロー

カル変数を次のとおりに初期化する。

P

%

!

&

%

S

)

$

V

L

V

T&

%%

P

(P

%

Z(Z&

%

%%

P

(

P

00

P

(

(

[%

.

&

ここで,

及び

は,ここで用いられている

の値に対して次のとおりに定義する。

ST

%

Y.L+*M/-,NO

6"

7#

89)

VY

&

P

S$

T

&

P

(

)

$

&

が真の場合,文字の位置だけを記憶し ,それ以外の情報は無視する。文字を無視しない場合,段階

で決

定した変換指定子に従って,

が入力フィールド の次の文字として許されるかど うかをチェックする。

が次の文字と

して許される場合は,

を追加する。

文字が無視 又は 追加された場合,

))

によって

を一つ先に進め,処理は段階

の最初に戻る。

段階

 段階

における処理の結果は,次のいずれかとなる。

段階

で蓄えられた

の列は(

の規則に従って )

の型の値に変換される。この値が

格納され,

33

に格納される。

段階

で蓄えられた

の列が

で入力誤りを起こした場合,

33

に代入さ

れる。

数字のグループ化を検査する。すなわち,無視された区切り記号の位置が,

(

と矛盾しないかど うかを検査する。区切り記号の位置に問題があっ

た場合は,

33

に代入する。

どのような場合でも,段階

の処理が

%%

のテストによって終了したときは,

1%

33

実行する。

(

(

)

(

&&)

(

)

!

効果  

(0

33

%%

.

の場合,

型の場合と同様に入力が行われる。ただし ,値

に格納される際,その値は次のとおり決定する。

格納される値が

の場合は,

を格納する。

格納される値が

の場合は,

を格納する。

それ以外の場合は,

1%

33

を実行し,値は格納しない。

それ以外の場合,合致検査の対象の列を,あたかも,

(

によって得

られる特性項目のメンバ

及び

を呼び出したかのようにして決定する。区間

7,

中の

連続した文字(

参照)を取り出し ,対象列中の対応する文字との合致検査を行なう。この場合の合致検査は,

完全に合致するか否かの検査だけを行えばよい。入力反復子

と比較されるのは,文字を取り出すのに必要

な場合だけとする。対象列に完全に合致したときかつそのときに限り,

を対応する値にセットする。

反復子は,常に,最後に合致し た文字の次の位置を指し た状態で終わる。

がセット された場合,

(

をセットする。ただし,次の合致する文字を得ようとして

%%

となった場合は,

(

をセットする。

がセットされなかった場合,

(

をセットする。ただし ,失敗の理由が

%%

である場合は,

(1

(

をセットする。

の対象が

YY

及び

の対象が

YY

の場合,入力列

YY

の結果は,

%%

及び

%%

(

となる。入力列

YY

の結果は,

%%

(

となる。この場合,

ZZ

要素を指して終了する。

の対象が

YLY

の対象が

Y.Y

の場合,入力列

YLY

の結果は,

%%

及び

%%

(

となる。対象列が空(

YY

)の場合,すべての入力列に対して,その結果

%%

(

となる。

返却値  


(

クラステンプレート

Q

B<

%

P

P

3

33

Q

3

P&

B<

P&

P$P

%

.&

P

P

P0

P

&

P

P

P0

P

&

P

P

P0

P

&

P

P

P0

P

&

P

P

P0

P

&

P

P

P0

P

!

&

33

&

3

XP&

''

仮想デストラクタ

P

PP

P0

P

&

P

PP

P0

P

&

P

PP

P0

P

&

P

PP

P0

P

&

P

PP

P0

P

&

P

PP

P0

P

!

&

R&

R

特性項目

は,出力ストリームなどの文字の列に対する,数値の書式付き出力に用いる。

のメンバ

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!

(

)

(

(

!$

!

返却値  

の仮想関数

!

(

)(

(

!

!

(

)(

(

!


)

!

(

)(

(

!

(

)(

(

!

!

(

)(

(

!

!

(

)(

(

!$

!

効果  書式に従って

を変換した文字列を列

に書き込む。ここでは,

を次のとおりに初期化されたローカ

ル変数とする。

%

(&

この操作は,複数の段階に分かれる。

段階

)

)の変換指定子

を決定する。次に,この変換指定子を用いて,

 &

を実行したときに出力される文字を決定する。この際,現地特性として

Y7Y

現地特性を仮定する。

段階

段階

で得られた各文字

に変換する。その際,

(

のメンバによって得られる変換 及び 値を用いる。

段階

詰め物が必要か否かを決定する。

段階

得られた列を

に挿入する。

各段階における処理の詳細は,段階

〜段階

に示すとおりとする。

返却値  

段階

 最初の処理では,変換指定子を決定する。この決定に用いる表では,次のローカル変数を使用する。

%

(

&

%

0

P33

&

%

0

P33

&

%

0

P33

&

%

0

P33

&

%

0

P33

&

段階

で用いられるすべての表は,順序をもつ。すなわち,条件が真となった最初の行を適用する。

:

それ以外

;

示してある行は,それよりも上の行が適用されなかった場合の省略時動作を表す。

文字型以外の汎整数型からの変換規則を,

#)

に示す。

#)

 汎整数変換

状態

対応等価な

の指定

%%

33

U

%%

33

00

[

U

%%

33

U5

符号付き汎整数型

U

符号なし汎整数型

U

浮動小数点型からの変換規則を

#

に示す。

#

 浮動小数点変換

状態

等価な

の指定

%%

33

U

%%

33

00

[

U

%%

33

U8

[

U

それ以外

U:

汎整数型 又は 浮動小数点型からの変換では,変数長変更子が

#*

に従って追加される。


#*

 変数長変更子

変数長変更子

?

それ以外

なし

更に,変換指定子には,

(

に示す( 省略可能な )修正子を前置することができる。

(

 数値変換

状態

等価な

の指定

汎整数型

0

)

0

浮動小数点型

0

)

0

浮動小数点型からの変換では,

0

[%

.

又は

.

の場合,

(

が変換

指定子の中に指定される。

!

の変換指定子は,

U

とする。

段階

の終わりに得られる表現は,

を実行したときに表示される

の列とする。ここで,

は,

上に示したとおりに決定した変換指定子とする。

段階

最初に,小数点(

(

)を除くすべての文字

(

を用いて

に変換する。

ローカル変数

を,次のとおり初期化する。

%

P

(

汎整数型の場合,

(

の返す値によって定められる位置(

で規定する方法を用いる。)

(

を挿入する。

小数点文字(

(

)は,

(

に置き換える。

段階

ローカル変数

を,次のとおり初期化する。

%

0

P33

&

詰め物が存在するとき,その位置を

(

に従って決定する。

(

 詰め物

状態

パデ ィング位置

%%

33

%%

33

%%

かつ表現中に符号が存在する場合

符号の後

%%

かつ表現が

.

又は

.5

で始まる場合

又は

5

の後

それ以外の場合

(

が非ゼロで,段階

で得られた列中の

の個数が

(

よりも少ない場合,列の長さを

(

とするに十分な文字

を,指定された位置に挿入する。

最後に,

(.

を呼ぶ。

段階

 段階

で得られた

の列が,次の式によって出力される。

!))

%

(

)

(

(

!

変換指定子

9

は,上位けたに

)

を生成するが,それは詰め物ではない。


*

効果  

(0

33%

%.

の場合,次の式を実行する。

%

P

そうでない場合,次の式を実行した後,

に挿入する。

0

%

P

&

P

%

2

(

3

(&

数値区切り特性項目

クラステンプレート

Q

3

33

Q

3

P&

P

P&

$P

%

.&

P

P

&

P

P

&

&

P

&

P

&

33

&

3

X&

''

仮想デストラクタ

P

PP

&

P

PP

&

P

&

P

P

&

''

型のため

P

P

&

''

型のため

R&

R

は,数値の区切り方を指定する。

#

)で要求される具現化,すなわち

及び

は,古典的な

Y7Y

の数値形式を表す。これらは,

Y7Y

現地特性に含まれる情報,及び それを

の呼出しによってワイド 文字化した情報を保持する。

数値形式の構文を下に示す。ここで,

 !

は,実引数

で指定された基数で使われ る数字の集合を表

す。

"

は,特性項目

によって決定される。

"

及び

#

は,対応する

のメンバの結果とする。整数の形式は,次のとおりとする。

33%

S!T

 !

!

33%

1 !

 !

S"

T

1 !

 !

33%

Z)Z

1

ZVZ

 !

33%

3!

S"

 !T

3!

33%

 !

S3!T

浮動小数点数の形式は,次のとおりとする。

50

33%

S!T

 !

S

#

S3!TT

S

S!T

3!T

1

S!T

#

3!

S

S!T

3!T

33%

ZZ

1

Z8Z

"

の間に書く数字の個数は,

によって指定される。構文解析を行う際,

 !

》部分に

"

が含まれない場合,グルーピングに関する制約は,適用されない。

のメンバ

返却値  


#

返却値  

返却値  

返却値  

又は

の仮想関数

返却値  小数点として使われる文字を返す。要求してある具現化では,

Z(Z

又は

?Z(Z

を返す。

返却値  数字グループの区切り記号として使われる文字を返す。要求してある具現化では,

Z Z

又は

?Z Z

を返す。

返却値  

整数値のベクトルとしての

。ベクトルの各要素

S"T

は,

"

番目のグループに含ま

れる数字の個数を表す。

ここでは,一番右のグループを

番目のグループとする。

($

%

"

の場合,

"

目のグループに含まれる数字の個数は,

"

番目のグループに等しい。

".

11

S"T%.

11

S"T%%7;6E

@65

の場合,

"

番目のグループに含まれる数字の個数に制限はない。要求してある具現化では,グルーピングが行われな

いことを示すために,空のストリングを返す。

返却値  

論理値の

及び

を表す文字列。基底クラスの実装では,これらの名前は

YY

及び

YY

するか,

?YY

及び

?YY

とする。

クラステンプレート

Q

P

3

Q

''

このクラスは,

及び

P

に対して特殊化される。

3

P&

P

P&

P

!

$P

%

.&

3

XP

&

''

仮想デストラクタ

P

PP

&

P

PP

&

P

&

P

P

&

''

型のため

P

P

&

''

型のため

R&

R

照合順序カテゴリ

したがって,

))J

は,数字

&

個から構成されるグループを表し ,

J

は,おそらく数字

/

個からなる

個のグループを表す。な

ぜなら,

/

は,

J

コードにおける値だからである。


#

クラステンプレート

Q

3

33

Q

3

P&

P

P&

$P

%

.&

!

L

!

L

!

+

!

+

&

P

!

!

&

!

!

&

33

&

3

X&

''

仮想デストラクタ

P

!

L

!

L

!

+

!

+

&

P

P

!

!

&

P

!

!

&

R&

R

クラス

は,文字列に関する順序比較( 照合順序付け ) 及び ハッシングに用いる機能を提供する。

現地特性のメンバ関数テンプレート

は,照合順序特性項目を用いて,文字列に対して操作を行う標準アル

ゴ リズム(

#

) 及び 標準コンテナの述語実引数に現地特性を直接使用することを可能にする。

#

で要求している具現化,すなわち,

及び

では,辞書順(

#

)を適用する。

ここで規定する各関数は,区間

7,

で文字列

!$

を比較する。

のメンバ

$

(

$

(

$

1(

$

1

返却値  

L

L

+

+

$

(

$

返却値  

$

(

$

返却値  

の仮想関数

$

(

$

(

$

1(

$

1

返却値  

番目の文字列が

番目の文字列よりも大きい場合は

,小さい場合は

,それ 以外の場合は

#

)で要求している具現化,すなわち,

及び

では,辞書順比較(

#

を実装する。

$

(

$

返却値  

の値。これは,他の文字列に対して

を呼んで得られた結果と辞書順で

比較した場合,それらの文字列に対して

を呼んだ場合と同じ結果を得る。

$

(

$

この関数は,一つの文字列を多くの文字列と比較するときに有用である。


#

返却値  

を用いて比較すると

を返す( すなわち等しい)ようなすべての文字列を考える。これらの

文字列に対して

が返す結果と等しい整数値。

参考 :

で比較した場合に等しくないと見なされる二つの文字列に対して,

が同じ値

を返す確率は非常に小さく,

L(.'

33

程度になるのが望ましい。

クラステンプレート

Q

P

3

Q

3

P

P&

P

!

$P

%

.&

3

XP

&

''

仮想デストラクタ

P

!

L

!

L

!

+

!

+

&

P

P

!

!

&

P

!

!

&

R&

R

#

時間カテゴリ

テンプレート

 <<

及び

 B<

は,日付 及び 時間の書式制御 及び 構文解析に関する機能を提供する。ここで規定する

及び

全メンバ関数の仕様は,

#

及び

#

で要求している具現化にだけ適用する。これらのメンバは,書式の詳細を

定めるため,

0

330

,実引数

,及び

特性項目を使用する。

#

クラステンプレート

Q

P

Q

3

Q

P

R&

R&

<<

%

P

P

3

33

P

Q

3

P&

<<

P&

P$P

%

.&

P

Q

PP&

R

P

PP

P

P0

P33

0

!

&

P

PP

P

P0

P33

0

!

&

P

P

P

P

P0

P33

0

!

&

P

P

P

P

P0

P33

0

!

&

P

PP

P

P0

P33

0

!

&

33

&

3

XP&

''

仮想デストラクタ

PP

&

P

PPP

P

P0

P33

0

!

&

P

PPP

P

P0

P33

0

!

&


#

P

PP

P

P

P0

P33

0

!

&

P

PP

P

P

P0

P33

0

!

&

P

PPP

P

P0

P33

0

!

&

R&

R

は,文字列を構文解析して時刻 又は 日付の要素を取り出し ,それを

レコード に格納するの

を目的とする。各

メンバは,入力の形式が

33

に対応する書式指定子によって構築されたものと

してその構文解析を行う。構文解析される列が正しい書式に合致するとき,

実引数の対応するメンバは,

列を構築する際に用いられた値にセットされる。そうでない場合,エラーが報告されるか,未規定の値が代入される。

#

のメンバ

返却値  

(

(

)

(

&&)

(

$

返却値  

(

(

)

(

&&)

(

$

返却値  

4

(

(

)

(

&&)

(

$

(

(

)

(

&&)

(

$

返却値  

又は

(

(

)

(

&&)

(

$

返却値  

#

の仮想関数

返却値  年・月・日からなる日付けの構成要素の順序を表す列挙型の値

ZZ

によって指定される日付けが上記

以外の構成要素( 例えば ,ユリウス暦日,週番号,曜日など )をもつ場合は,

を返す。

(

(

)

(

&&)

(

$

効果  

から始まる文字を読み込み,

のメンバを読み取り,それに続く書式文字(

33

で書

式指定文字

Z5Z

に対応して作り出された部分)を読み捨てる。途中で誤りを検出するか入力の終わりに達するかした

ときは,ただちに終了する。

返却値  有効な時刻書式の最後であると認識された文字の次を指す反復子。

(

(

)

(

&&)

(

$

すなわち,利用者の入力した日付 及び 時刻を信頼できる形で構文解析するには,利用者の確認が必要であるが,計算機が生成した書

式は,信頼できる形で構文解析可能である。この結果,構文解析器は,標準書式からの利用者の逸脱を積極的に解釈して差し支えない。

この関数は,通常の書式に対してだけ便宜をはかることを意図して設けられている。したがって,有効な現地特性に対して

&

を返してもよい。


#

効果  

から始まる文字を読み込み,

のメンバを読み取り,それに続く書式文字(

33

で書

式指定文字

ZZ

に対応して作り出された部分)を読み捨てる。途中で誤りを検出するか入力の終わりに達するかした

ときは,ただちに終了する。

返却値  有効な日付け書式の最後であると認識された文字の次を指す反復子。

4

(

(

)

(

&&)

(

$

(

(7)

(

&&)

(

$

効果  

から始まる文字を,曜日 又は 月の名前( 略語かもしれない。)を取り出すまで読み込む。略語の後に完全

な名前を構成する文字が続いた場合,完全な名前に合致するか,それが失敗するまで読込みを続ける。この関数は,

の適切なメンバをセットする。

返却値  有効な名前の最後であると認識した文字の次を指す反復子。

(

(

)

(

&&)

(

$

効果  

から始まる文字を,あいまいでない年識別子を取り出すまで読み込む。数字

文字からなる年番号を受け付

けるかど うか,受け付ける場合にどの世紀であると見なすかは,処理系定義とする。

V

を読み込んだ年に

従ってセットする。

返却値  有効な年識別子の最後であると認識された文字の次を指す反復子。

#

クラステンプレート

Q

<<

%

P

PP

3

P

<<

Q

3

P33

&

<<

P&

PP

!

$P

%

.&

3

XPP

&

''

仮想デストラクタ

PP

&

P

PP

P

P

P0

P33

0

!

&

P

PP

P

P

P0

P33

0

!

&

P

PP

P

P

P0

P33

0

!

&

P

PP

P

P

P0

P33

0

!

&

P

PP

P

P

P0

P33

0

!

&

R&

R

#

クラステンプレート

Q

B<

%

P

P

3

33

Q

3

P&

B<

P&

P$P

%

.&

''

以下は,他のメンバ関数によって実装される。

P

P

P0

P

!


##

!

!

P

&

P

P

P0

P

!

%

.

&

33

&

3

XP&

''

仮想デストラクタ

P

PP

P0

P

!

&

R&

R

#

のメンバ

(

)

(

(

$

(

$

(

$

(

)

(

(

$

(

(

,

効果  

最初の形式は,

から

までの列を順に見ていき,書式指定である部分を認識する。書式指定を

構成しない文字は,ただちに

に書き出す。書式指定の場合は,それが同定された時点で

を呼び出す。した

がって,書式指定とその他の文字は,それがパターン中に現れた順序で出力中に現れることになる。書式指定は,次

のとおり同定する。最初に,各文字

( .

を呼び出したと同様に

値に変換する。ここで,

は,

(

から得られた

への参照とする。各列の最初の文字は

ZUZ

に等しく,その後に省略可能

な変更指定文字

と書式指定文字

が,関数

で定義されたのと同様に続く。

変更指定文字が存

在しない場合,

はゼロとする。認識された有効な書式指定ごとに,

呼び出す。

の形式では,

を呼び出す。

参考

実引数

は,処理系定義の形式の中で,又は 派生クラスによって用いられるかもしれない。空白文

字は,この実引数の省略時の値として妥当なものである。

返却値  出力された最後の文字の次を指す反復子。

#

の仮想関数

(

)(

(

$

(

(

効果  実引数

の内容を,出力列

中の文字として出力する。書式制御は,実引数

によってコ

ントロールされる。これは標準ライブラリ関数

の文字列実引数の形式指定と同様に解釈される。

だし ,これらの形式指定で構築される文字列は,処理系定義でなく,

Y7Y

現地特性に従うという点が異なる。

返却値  出力された最後の文字の次を指す反復子。

#

クラステンプレート

Q

B<

%

P

PP

3

P

B<Q

3

P&

B<

P&

PP

!

$P

%

.&

3

XPP

&

''

仮想デストラクタ

P

PP

P0

P

!

&

R&

R

言語では,変更指定文字を規定していないが,ほとんどのベンダーは,変更指定文字を規定している。

&%

実引数の実装は,処理系定義であるが,

%

の規定に従う。

これらの定義を行うにあたって,処理系は,他の標準( 例えば,

%

)を参照することが推奨されている。


#(

(

通貨カテゴリ

このカテゴ リのテンプレートは,通貨書式を扱う。テンプレート仮引数は,使用する現地通

貨書式 又は 国際通貨書式を指定する。

(

で規定する

及び

のメンバ関数仕様は,

#

及び

#

)で要求してい

る具現化にだけ適用する。これらのメンバは,

の規定と同様に

0

330

,実引数

を使用し ,さらに

及び

特性項目も使用して,書式の詳細を定める。

(

クラステンプレート

Q

<<

%

P

P

3

33

Q

3

P&

<<

P&

P

P&

P$P

%

.&

P

P

P

P0

P33

0

0

&

P

P

P

P0

P33

0

P0

&

33

&

3

XP&

''

仮想デストラクタ

P

PP

P

P0

P33

0

0

&

P

PP

P

P0

P33

0

P0

&

R&

R

(

のメンバ

(

(

(

)

(

&&)

(

)

(

(

(

)

(

&&)

(

)

返却値  

(

の仮想関数

(

(

(

)

(

&&)

(

)

(

(

(

)

(

&&)

(

)

効果  

から読み込んだ文字を構文解析して通貨値を組み立てる。この際,

<

特性項目の

参照

によって指定され る書式,

特性項目の参照

( これは

(

によって返され る現

地特性から得られる。)及び

(

によって指定される文字の対応付けに従う。有効な列が認識された場合,

は変更されない。それ以外の場合,

1(

に,又は ( それ以上文字が得られない場合は )

1(

1

(

にセットされ,

及び

は変更されない。

(

の返すパ

ターンを使用して,すべての値を構文解析する。結果は,その汎整数値が

に格納されるか,数字の列が

に格納されるかとする。

の場合,先頭に負号を表す文字(

(

によって構築されるもの。ここで

は,

ZVZ

か,

Z.Z

から

ZOZ

までの文字のいずれかとする。)が付くかもしれない。


#)

合衆国における通常の現地特性において,

L ./-(+*

という列に対しては,

L./-+*

構築するか,

YL./-+*Y

を構築するかのいずれかとなる。

(

がけた区切り記号を許さない場合,そのような区切り記号は読み込まれず,構文解析は,そのような

記号が最初に現れた時点で終了する。それ以外の場合,けた区切り記号は省略可能とする。すなわち,それらが存在

する場合は,書式を構成する要素がすべて読み込まれてから,区切り記号の位置が正しいかど うかをチェックする。

又は

が,書式パターンの末尾以外にあらわれた場合,その位置にある空白

個を読み捨て,それに続く

空白類(

(

によって認識される文字)があれば,それらすべてを読み捨てる。

(

0

(

の場合,通貨記号は省略可能であり,書式を終了させるために他の文字が必要な場合にだけ読み捨てられる。

それ以外の場合,通貨記号は必す( 須)とする。

(

が返す文字列

又は

(

が返す文字列

の最初の文字が,書式パター

ン中の

で示される位置で認識された場合,その文字を読み捨て,その文字列の残りの文字があらわれてはじめ

て,通貨書式の終わりとなる。

がオフ,

の値が

YY

,通貨記号が

Y?Y

の場合,

YL..?Y

では,

Y?Y

が読み捨てられる。

しかし ,

YVY

の場合,

YVL..?Y

Y?Y

は読み捨てられない。

又は

が空の場合,符号要素は省略可能とする。符号要素が存在しない場合は,空文字列の符号であると認識

される。それ以外の場合,指定された位置の文字は,

又は

の最初の文字と合致しなければならず,結果とし

て得られる符号は合致したほうの符号となる。

の最初の文字と

の最初の文字が等しい場合,又は ど ちらも空

文字列の場合,符号は正となる。

数値要素中の数字は,

に格納されるか,

の値を構築するため文字バッファ

L

に格納される。ここ

で,数字が格納される順序は出現順とし ,負号が存在する場合はそれを先頭に付ける。結果が負になるのは,負号が

存在する場合だけとする。

の値は,次のとおりに構築する。

%

.&

&

))

+ST

%

S

)$

LST

V

T&

+ST

%

.&

+

YU?Y

0&

ここで,

L

に格納された文字数,

+

は文字バッファとし,

及び

の値は次のとおりとする。

ST

%

Y.L+*M/-,NOVY&

S$

T

&

(

)

$

V

L

&

返却値  有効な通貨値を構成すると認識された最後の文字の次の文字を指す反復子。

(

クラステンプレート

Q

B<

%

P

P

3

33

Q

3

P&

B<

P&

P

P&

P$P

%

.&

P

P

P0

P

&

P

P

P0

P

P0

&

33

&

3

XP&

''

仮想デストラクタ

P

PP

P0

P

&

ここでの意味論は,

0

のそれとは異なる。


#

P

PP

P0

P

P0

&

R&

R

(

のメンバ

(

(

)

(

(

(

(

)

(

(

)

返却値  

(

の仮想関数

(

(

)

(

(

(

(

)

(

(

)

効果  

<

の特性項目の参照

によって指定される書式,

の特性項目の参照

(これは

(

によって返される現地特性から得られる。)及び

(

によって指定される文字対

応付けに従って,

に文字を書き込む。実実引数

の値は,まず,次のとおりワイド 文字の列

+

に変換する。

(L

L

)

L

YU(.LY

+

又は

+

中の最初の文字が

(ZVZ

に等しい場合,書式制御に用いるパターンは,

(

の結果とする。それ以外の場合は,

(

の結果を用いる。数字は,

又は

+

中に現れる順序で書き込む。その際,書式によって指定されるけた区切り記号 及び 小数点記号も加える。また,負号

は先頭に書く。

の場合,省略可能な先頭の負号,及び それに続く数字(

によって区別される。)だけを使用

する。それ以降の文字は(非数字文字以降に存在する数字も含めて )無視する。最後に,

(.

を呼び出す。

備考

通貨記号は,

(

0

(

が非ゼロの場合,及び その場合に限って生成される。指

定された書式に従って生成された文字の個数が,この関数に入った時点で

(

が返す値よりも小さ

い場合,必要な文字幅を埋めるため,

のコピーが挿入される。

(

0

(

と値

について,

%%

(

が真の場合,詰め物文字が書式中の

又は

が現れ

る場所に挿入される。それ以外の場合,

%%

(

のとき他の文字の後に,それ以外の

とき他の文字の前に詰め物文字が挿入される。

参考

書式とフラグ 値の組合せによっては,

33

で構文解析できないような出力を生

成することも可能である。

返却値  最後に構築された文字の次を指す反復子。

(

クラステンプレート

Q

P

Q

3

Q

R&

Q

SMT&

R&

R&

<

%

3

33

P

Q

3

P&

P

P&

$P

%

.&

P

&

P

&

&


#*

P

P

&

P

P

&

P

P

&

P

&

P

&

P

&

33

&

%

<&

3

X&

''

仮想デストラクタ

PP

&

PP

&

P

&

P

PP

&

P

PP

&

P

PP

&

PP

&

PP

&

PP

&

R&

R

の特性項目は,

及び

で用いられる通貨書式仮引数を定義する。通貨書

式は,

で表現される

要素の列とする。このとき,

(

S

T

が,書式

の第

要素を決定する。

オブジェクト

のメンバ

中で,

及び

の各値は,

回しか現れてはならない。更に,

及び

については,これらのいずれか一つだけが出現する

ことができる。値

が存在する場合,それは先頭にあってはならない。値

が存在する場合,それは先頭 又

は 末尾にあってはならない。

又は

が現れる個所では,書式中に空白類を含むことが許される。ただし ,

が末尾に現れる場合

は,例外とし,空白類を許さない。値

は,その場所に少なくとも

個の空白が必要であることを表す。

が現れる個所では,

が返す文字列が許される。場合によっては,そのような文字列を要求することも

ある。

が現れる場所では,

又は

が返す文字列の先頭にある文字を必要と

する。符号に関する文字列の残りの要素は,他の全書式要素の終わりに必要とする。

が現れる場所では,通貨

値の絶対値を必要とする。

通貨の数値の書式は,十進数とする。

0

33%

 !

S

#

S

3!

TT

1

#

3!

上に示した形式は,

が正の値を返す場合であり,そうでない場合は,次のとおりとする。

0

33%

 !

上の表記中,記号

#

は,

が返す文字を表す。残りの記号は,次のとおりとする。

 !

33%

3!

S

"

 !

T

3!

33%

 !

S

3!

T

ここで,記号

 !

は,

Z.Z

から

ZOZ

の値域の

に対して

(

が返す値のいずれかとする。ここで,

は,

0

型の参照とし ,

及び

の定義で示し た方法で得られる。

記号

"

は,

が返す文字とする。空白文字は

(Z

Z

の値とする。空白類は,

(

を返す文字

とする。小数点以下の数字が要求される場合,そのけた数は,

が返す値に等しくなければならない。

けた区切り文字の位置は,メンバ

33

と同じ定義をもつ

の返す値によって

決定される。

(

のメンバ

%&

は,

の配列ではなく,

?

の配列として定義されているが,これは純粋に効率のためである。


(

!

!

効果  

これらの関数

は,対応する仮想関数

を呼び出した結果の値を返す。

(

の仮想関数

返却値  

がゼロより大きい場合に使用される基数分離記号。

返却値  

が数字のグルーピングを指定している場合に使用される,けた区切り記号。

返却値  

33

の結果と同等に定義されるパターン 。

返却値  通貨記号として使われる文字列。

!

!

返却値  

は,正の金額を表すために用いられる文字列を返す

は,

負の金額を表すために用いられる文字列を返す。

返却値  十進の基数分離記号以降に存在する数字の個数。

返却値  表

#

)で要求される具現化,具体的には

及び

を行い,

に初期化さ

れた型

のオブジェクトを返す。

(

クラステンプレート

Q

<

%

P

3

<

Q

3

P33

&

P

P&

P

!

$P

%

.&

3

XP

&

''

仮想デストラクタ

PP

&

PP

&

P

&

P

PP

&

合衆国では,

:0:

であり,日本でも

:0:

である。

合衆国では,

:/:

であり,日本でも

:/:

である。

最も一般的には,この値は

!!&

である(

&

ではない。)

国際的な具現化(テンプレートの第

仮引数が

$

の場合)では,これは常に

-

文字長であり,通常

&

個の文字と

個の空白で構

成される。

通常,空文字列である。

合衆国の現地特性では,

である。日本の現地特性では,

!

である。

&

$

が返す国際的な記号は,通常空白を含む。例えば,合衆国では

I2F

であり,日本では

K@L

である。


(

P

PP

&

P

PP

&

PP

&

PP

&

PP

&

R&

R

)

メッセージ検索カテゴリ

クラス

は,メッセージカタログからの文字列検索を実装する。

)

クラステンプレート

Q

P

Q

3

&

R&

3

33

P

Q

3

P&

P

P&

$P

%

.&

P

0

0

&

P

P0

&

&

33

&

3

X&

''

仮想デストラクタ

P

P

0

0

&

P

P

P0

&

P

&

R&

R

33

の値は,メンバ

及び

への実引数として使う。これらの値は,メンバ

を呼び出すことだけによって得られる。

)

のメンバ

/0)

(

)

返却値  

(

(

(

)

返却値  

!

効果  

を呼び出す。

)

の仮想関数

/0)

(

)

返却値  メッセージを検索するため,

に渡される値。このメッセージカタログは,処理系定義の対応付けを用

いて,文字列

によって同定される。この関数が返す結果は,それが

に渡されるまで使用可能とする。

参考

現地特性の実引数

は,メッセージ検索時における文字集合のコード 変換が必要な場合に使用される。


(

(

(

(

)

要件  カタログ

は,

によって得たものであって,まだクローズされていないものでなければならない。

返却値  処理系定義の対応付けを用いて,

及び

によって同定されるメッセージ。メッセージが

検索できなかったときは,

を返す。

!

要件  

カタログ

は,

によって得られたものであって,まだクローズされていないものでなければならない。

効果  

に関連付けられたリソースを解放する。

備考

リソースに関する制限が存在する場合,それは処理系定義とする。

)

クラステンプレート

Q

P

3

Q

3

P33

&

P

P&

P

!

$P

%

.&

3

XP

&

''

仮想デストラクタ

P

P

0

0

&

P

P

P0

&

P

&

R&

R

プログラム定義の特性項目

"##

プログラムは,新たな特性項目を定義し ,それを現地特性に追加して組

込みの特性項目と同様に使用することができる。新しい特性項目のインタフェースを定義する場合,

"##

プログラ

ムは,

33

を基底クラスとして,

33

を含むクラスを派生してよい。

参考

現地特性のメンバ関数テンプレートが,その型 及び 記憶域種別を確認する。

(この段落は,意図的に空にする。)

従来の大域的現地特性を使用することは,容易としている。

!!

Q

&

33

YY

&

''

大域的現地特性をセット

''

それをすべての

ストリームに浸透

(

&

(

&

(

&

(

&

(

&

(

&

@B

(&

R

より柔軟性をもたせることも可能である。

Q

&

(

YY

&

''

利用者の好む現地特性


(

(

33

&

&

&

(

[%

.&

R

ヨーロッパの現地特性では,

*(M/- ,N

の入力に対して

*M/-(,N

が出力される。

このことは,利用者の設定を無視して,固定書式でファイルにデータを書き込むといった,単純なプログラムにお

いても重要である。

ライブラリインタフェースでの現地特性の使用例を示す。

''

ファイル

#(

(((

#

Q

(((

3

#

&

33

F

330

%

33&

R&

0

0

#0

&

0

0

#

&

(((

この例は,クラス

の二つの構文の使い方を示している。

最初の例は,

#33F

の省略時実引数としての使用法を示す。そこでは,省略時実引数とし

て大域的な(たぶん利用者好みの )現地特性が使われている。

番目の例は,演算子

及び

にある。そこでは,現地特性が他のオブジェクト( この場合はスト

リーム)に便乗して,それが必要となるところまで運ばれている。

''

ファイル

#(7

Y#Y

''

を取り込む。

33

#33F

330

Q

&

&

(&

!&

(&

R

330

33

0

#0

Q

&

33

&

Q

P33

%

&

&

P

P

((

P

.

0&

[

%

#(P

(P

)

L

(P

)

LO..&

(

&

R

&

R

現地特性オブジェクトには,

33

から派生したクラスのインスタンスを構築することで新しい特性項目

を追加することができる。

"##

プログラムが定義しなければならない唯一のメンバは,静的メンバ

とする。これ

は,利用者定義のクラスを新しい特性項目として識別する。

日本語文字の分類。

''

ファイル

@

Q


(

&

=7

3

33

Q

3

33

&

''

新しい特性項目として使うのに必要

P

P

&

=7

QR

3

X=7

QR

R&

R

''

ファイル

(7

YY

''

上記のファイル

3333

@33=733&

''

静的メンバ

=7

は,上で宣言されている

Q

&

P

&

YY

''

利用者好みの現地特性

(((

@33=7&

''

新しい特性項目

(((

P

%

P

(

Z[Z

&

[P@33=

7

(

P

Y

Z[Y

&

.&

R

新しい特性項目は,組込みの特性項目と同じに使用されている。

既存の特性項目を置き換えるのも簡単である。ここでは,メンバ

を定義していない。なぜなら

特性項目インタフェースを再使用しているからである。

''

ファイル

P(7

@

Q

&

P

&

"A

3

Q

3

P

Q

YB

B[Y&

R

P

Q

Y@

A[Y&

R

X"A

QR

3

"A

!

3

QR

R&

R

!!

Q

&

''

利用者好みの現地特性を作るが,次の点だけが異なる。

YY

@33"AYY

&

(&

Y6

2

Y

L

&

.&

R


(#

ライブラリの現地特性 ヘッダ

の内容を,

(

に示す。

(

ヘッダ

の一覧

種別

名前

マクロ

?7

6??

?7

7B??68

?7

7JC8

?7

@BA86EJ

?7

AG@8E<7

?7

<@8

AG??

構造体

関数

の内容は,標準

"

ライブラリヘッダ

(

に等しい。

参照  

6

)

コンテナ

では,

"##

プログラムの中で情報の集まりを組織するのに用いるライブラリを規定する。

ここで規定する項目を,

(

に示す。

(

コンテナライブラリ

箇条

ヘッダ  

要件

連想コンテナ

#

ビットセット

コンテナに対する要件 コンテナは,他のオブジェクトを格納するオブジェクトとする。コンストラクタ( 構

築子),デストラクタ( 解体子),挿入演算 及び 消去演算を用いて,これらのオブジェクトの割付け 及び 解放を制

御する。

で規定するすべての計算量要件は,コンテナが含むオブジェクトに対する演算の回数だけで記述する。

のコピーコン ストラクタは,線形計算量をもつ。そして,そこに含まれる

のそれぞれをコピーする計算量そのものも線形である。

コンテナに格納されるオブジェクトの型は,型

77

の要件(

参照)に加えて,代入可能な

6

の要件も満足しなければならない。

(

で,

はコンテナを具現するのに使う型とし ,

の値とし ,

であってよい。)の値とする。

(

 代入可能な型

6

の要件

返却値の型

事後条件

%

0

は,

と等価になる。

(#

及び

((

で,

5

は,型

のオブジェクトを含むコンテナクラスを表し ,

及び

は型

5

の値を表し ,

識別子を表し ,

50

の値を表す。

(#!

コンテナ要件

返却値の型

表明,備考,事前条件,事後条件

計算量

533

6

コンパイル時

533

の左辺値

コンパイル時


((

(#!

コンテナ要件

( 続き)

返却値の型

表明,備考,事前条件,事後条件

計算量

533

の定値左辺値

コンパイル時

533

を指す反復子型

出力反復子以外の任意の反復子カテゴ リ。

コンパイル時

533

に変換可能。

533

を指す

出力反復子以外の任意の反復子カテゴ リ。

コンパイル時

反復子型

533

符号付き汎整数型

533

533

コンパイル時

差分型と同じ

533$

符号なし汎整数型

$

は,

コンパイル時

すべての非負の値を表せる。

5

&

事後条件

($

%%

.

定数

5&

5($

%%

.

定数

5&

%%

5

線形

5

&

事後条件

%%

線形

5

%

&

5

&

%

&

と等価。

0VX5&

備考 このデストラクタは,

の全要素に

線形

適用される。

すべてのメモリが解放される。

(

定数

定数

については

(

定数

定数

については

%%

に変換可能

%%

は等価関係。

($

%%

($

00

線形

(

(

(

[%

に変換可能

[

%%

と等価。

線形

(

定数

この箇所は,計算量を定数とするのが望ましい。

(#!

コンテナ要件

返却値の型

操作の意味

事前条件,事後条件

計算量

%

50

事後条件

%%

線形

($

$

(V(

定数

(

$

$

最大可能コンテナの

$

定数

(

に変換可能

($

%%

.

定数

に変換可能

事前条件

は,

の値に

線形

( (

ついて定義されている。

( (

は,全順序関係。

に変換可能

線形

%

に変換可能

[

線形

%

に変換可能

[

線形

この箇所は,計算量を定数とするのが望ましい。

参考 アルゴ リズム

,

及び

は,

#

で定義する。

メンバ関数

$

は,コンテナの要素数を返す。その意味は,コンストラクタ,挿入 及び 消去の規則で定義する。


()

は,コンテナの先頭要素を参照する反復子を返す。

は,コンテナの末尾の次を指す反復子を返す。

コンテナが空のとき,

%%

とする。

で定義されたすべてのコンテナ型のコピーコンストラクタは,最初の仮引数から割付け子実引数をコピーする。

これらのコンテナ型の他のコンストラクタは,すべてその値型がコンテナの値型と同じ割付け子である

60

を実引数にする(

#

参照)。これらのコンストラクタ 及び すべてのメンバ関数は,この実引数のコピーを,コ

ンテナオブジェクトの生存期間に実行されるすべてのメモリ割付けで使用する。

で定義されるすべてのコンテナ

型に対して,メンバ

は,コンテナを作るのに使用する割付け子オブジェクトのコピーを返す。

コンテナの反復子型が両進反復子 又は ランダ ムアクセス反復子のカテゴ リに属する場合,そのコンテナは,逆進

可能と呼ばれ,

((

の要件も併せて満たす。

((

 逆進可能コンテナの要件

返却値の型

表明,備考

計算量  

533

を指す反復子型

コンパイル時

533

を指す反復子型

コンパイル時

(

定数

定数

については

(

定数

定数

については

特に規定する場合(

及び

参照)を除いて,

で定義するすべてのコンテナ型は,次の追加要

件を満たさなければならない。

単一要素の挿入時に関数

が例外を送出した場合,その関数は何の効果ももたらさない。

関数

又は

が例外を送出した場合,その関数は何の効果ももたらさない。

関数

及び

は,例外を送出しない。

返された反復子の,コピーコンストラクタ 及び 代入演算子は,例外を送出しない。

コンテナの比較子オブジェクト(

参照)

(もし存在すれば )のコピーコンストラクタ 又は 代入演算

子が送出する例外を除いて,関数

は例外を送出しない。

関数

は,スワップされるコンテナの要素を参照する参照,ポインタ 及び 反復子を無効としない。

( 明示的 又は 他の関数による関数定義によって )特に規定しない限り,コンテナのメンバ関数を呼び出すこと 又は

コンテナをライブラリ関数への実引数として渡すことは,そのコンテナの中のオブジェクトへの反復子を無効にした

り,オブジェクトの値の変更をしたりしない。

!A

は,同じ型のオブジェクトの有限集合を組織化して,厳密に線形配置するコンテナの一種

とする。標準ライブラリは,基本となる

種類の列コンテナ,

及び

を提供する。さらに,標準

ライブラリは,基本的な列( 又は ユーザが定義した他の列)から

などの抽象データ型を構成しやすく

するコンテナアダプタを提供する。

及び

は,プログラマに異なった計算量のトレード オフを提供するので,それに応じて使うの

がよい。

は,特に要求がないときに使う。

は,列の中に頻繁に挿入削除する場合に使う。

は,ほ

とんどの挿入 及び 削除が列の先頭 又は 末尾で生じる場合に適している。

()

及び

(

では,

5

が列クラスを表し,

5

の値を表し,

及び

が入力反復子要件を満足する反復子を表

し,

7,

が正当な区間を表し,

533$

の値を表し,

に対する正当な反復子を表し,

に対す

る参照がはずされた正当な反復子を表し,

7L,

+

における正当な区間を表し,

533

の値を表す。

式の計算量は,列に依存する。


(

()

 列の要件(コンテナへの追加要件)

返却値の型

表明,備考,事前条件,事後条件

5

事後条件  

$

%%

のコピーを

個もつ列を

5

&

構築する。

5

事後条件  

$

は,

との間の

となる。

5

&

区間

7

から成る列を構築する。

(

のコピーを

の前に挿入する。

(

個のコピーを

の前に挿入する。

(

事前条件  

及び

は,

への反復子ではない。

7

にある要素のコピーを

の前に挿入する。

(

によって指されている要素を消去する。

(L +

区間

SL +

にある要素を消去する。

(

事後条件  

$

%%

.

列に対する型

及び

は,少なくとも前進反復子カテゴ リでなければならない。

(

から返された反復子は,

に挿入された

のコピーを指す。

(

から返された反復子は,消去される前の

の直後の要素を指す。そのような要素が存在しない場合,

(

が返される。

(L +

から返された反復子は,要素が消去される前の

+

が指していた要素を指す。そのような要素が存

在しない場合,

(

が返される。

及び

で定義されるすべての列について,次が成り立つ。

次のコンストラクタがあったとする。

<<

5<<

<<

60

%

6

このコンストラクタは,

<<

が汎整数型のとき,次と同じ効果をもつ。

5P

533$P

P

533P

次の形式のメンバ関数があったとする。

<<

''

のような

L

<<

<<

&

<<

''

のような

+<<

<<

&

<<

''

のような

*

L

+

<<

<<

&

<<

が汎整数型のとき,これらは,それぞれ次と同じ効果をもつ。

L

P

533$P

P

533P

&

+P

533$P

P

533P

&

*L

+

P

533$P

P

533P

&

参考 これは,反復子要件表の要件から直接出て来る。汎整数型は,反復子であり得ない。したがって,

L

+

が汎整数型

の値の場合,式

5L

+

は,反復子の区間からの構築とは解釈され得ない。それ

は,反復子要件表の第

コンストラクタではなく第

コンストラクタを意味すると解釈しなければならな

い。

から

533

への変換がない場合,それは,正当な式ではない。


(*

この要件を満足する列の実装の方法の一つに,そのメンバテンプレートをすべての汎整数型に対して特

殊化するという方法がある。面倒の少ない他の実装技法も存在する。

&

(((

(

(&

''

反復子の区間からベクトル

''

を構築する。

$L..

L&

''

すべての要素が

L

に初期化される

''

L..

要素のベクトルを構築する。

''

実引数は,反復子とは解釈されない。

$($(

(

(&

''

反復子の区間を挿入する。

$($(

+.

.&

''

数値

.

のコピーを

+.

個挿入する。

(

は,特定の列コンテナに対して提供される列演算を示す。処理系は,

:

コンテナ

;

の欄に示すすべてのコンテ

ナ型に対してこれらの演算を提供しければならず,ならし定数時間で実行できるように実装しなければならない。

(

 列演算( 付加的要件)

返却値の型

操作の意味

コンテナ  

(

!(

定数

には

(

!VV(

定数

には

(

((

(

((

(

((

(

(VV(

ST

!(

)

定数

には

(

!(

)

定数

には

メンバ関数

は,コンテナの要素に対するアクセスを提供する。

は境界検査を行ない,

%

($

あるとき

を送出する。

連想コンテナ

連想コンテナは,キーに基づいたデータの高速検索を可能にする。標準ライブラリは,

及び

種類の基本連想コンテナを提供する。

各連想コンテナは,

>

及び 順序関係

7

により区分され る。

7

は,

>

の要素に対する弱全順序

#

)を与える。

及び

は,

>

に任意の型

を関連付ける。型

7

のオブジェクトを,コンテ

ナの比較子オブジェクトと呼ぶ。比較子オブジェクトは,関数へのポインタであるか 又は 適切な関数呼出し演算子

をもつ型のオブジェクトでなければならない。

:

キーの同値性

;

という句は,比較子から生じる同値関係を意味し ,キーに対する

%%

を意味しない。すな

わち,二つのキー

L

及び

+

が同値であるとは,比較子オブジェクト

に対して

L

+

%%

00

+

L

%%

の場合とする。

連想コンテナが一意キーに対応するのは,各キーに対して高々一つの要素を含む場合とする。そうでない場合,同

値キーに対応する。クラス

及び

は,一意なキーに対応する。クラス

及び

は,同値キー

に対応する。

クラス

及び

の値の型は,キーの型と同じとする。クラス

及び

の値の型は,

>

と等価とする。

連想コンテナの反復子は,両進反復子カテゴ リとする。

(*

では,

5

を連想コンテナクラス,

5

の値,

5

が一意キーに対応するときの

5

の値,

5

多重キーに対応するときの

5

の値とし ,

及び

が入力反復子要件を満足し ,値型の要素を参照し ,

7

を正当な

区間,

への正当な反復子,

を正当な参照がはずされた

への反復子,

7L

+

における正当な区間,

533

の値,

533

の値,

を型

533

の値とする。


)

(*

 連想コンテナの要件(コンテナへの追加要件)

返却値の型

表明,備考,事前条件,事後条件

計算量  

533

>

>

6

コンパイル時

533

7

省略時は

コンパイル時

533

"C

及び

については,

コンパイル時

と同じ 。

及び

については,第

要素( すなわち

>

)に

よる対の順序関係とする。

5

空コンテナを構築する。

を比較子オブ

定数

5

&

ジェクトとして使う。

5

空コンテナを構築する。

7

を比

定数

5

&

較子オブジェクトとして使う。

5  &

空コンテナを構築し ,その中に区間

7

一般に

5

  &

の要素を挿入する。

を比較子オブジェク

から

トとして使う。

への距離とす

る。)

7,

で整列している

場合には,線形。

5

上と同じだが,

7

を比較子オブ

上と同じ

5

&

ジェクトとして使う。

(

533

を構築する際の対象となった比較子オブ

定数

ジェクトを返す。

(

533

比較子オブジェクトから構築された

定数

のオブジェクトを返す。

(

のキーと同値な キーをもつコンテナに

対数

要素がない場合に,またその場合に限り,

を挿入する。返された対の

要素

は,挿入が生じたかど うかを示し ,その

対の

要素は,

のキーと同値

なキーをもつ要素を指す。

(

を挿入し,新たに挿入された要素を指す

対数

反復子を返す。

(

一意キーをもつコンテナに

のキーと同値

一般に対数であ

なキーをもつ要素がない場合に,またその

るが,

場合に限り,

を挿入する。同値な キーを

直後に挿入され

もつコンテナには常に

を挿入する。

たときは,なら

キーと同値な キーをもつ要素をもつ反復子

し定数とする。

を常に返す。反復子

は,どこから挿入が

探索を始めるべきかを指すヒントとする。

(

事前条件  

,

の反復子であっては

一般に

ならない。区間

7

の各要素について

 $

#

その要素のキーと同値な一意キーをもつ

から

コンテナにその要素のキーと同値なキーを

への距離とする。)

もつ要素がない場合に限り,挿入する。

7

同値なキーをもつコンテナに常にその

で整列し

要素を挿入する。

ているとき線形。


)

(*

 連想コンテナの要件(コンテナへの追加要件)

( 続き)

返却値の型

表明,備考,事前条件,事後条件

計算量  

(

$

に等しいキーをもつコンテナ内の全要素

 $#

を消去する。消去要素の個数を返す。

(

で指される要素を消去する。

ならし定数

(L +

区間

7L

+

の全要素を消去する。

 $

#

ここで,

L

から

+

への距離

とする。

(

(

(

$

に線形

事後条件  

$

%%

.

(

に同値な キーをもつ要素を指す反復子

対数

が定数の場合には

又は

(

(そのような要素が見つか

らない場合)を返す。

(

$

に同値な キーをもつ要素の個数を返す。

対数

(

以上のキーをもつ最初の要素を指す反復

対数

が定数の場合には

子を返す。

(

より大きいキーをもつ最初の要素を指す

対数

が定数の場合には

反復子を返す。

(

(

対数

が定

(

に等価。

数の場合には

メンバの挿入は,コンテナの反復子 及び 参照の正当性に影響を与えない。メンバの消去は,消去される要素の反

復子 及び 参照だけを無効とする。

連想コンテナの反復子は,キーの非減少順序でコンテナを反復することをその基本特性とする。非減少順序は,そ

の連想コンテナの構築に用いた比較

によって定義する。

から

への距離が正であれば ,参照をはずす

ことが可能な任意の二つの反復子

及び

について次が成り立つ。

P!

!

%%

一意キーをもつ連想コンテナについては,より強い次の条件が成り立つ。

P!

!

[%

コンストラクタに比較子オブジェクトを渡して連想コンテナを構築した場合,そのコンテナは,渡されたオブジェ

クトへのポインタ 又は 参照を,たとえ参照渡しされたときでも,格納してはならない。連想コンテナが,コピーコ

ンストラクタ 又は 代入演算子によってコピーされる場合,コピー先のコンテナは,コピー元のコンテナの比較子オ

ブジェクトが,与えられてそのコピー先コンテナが構築された場合と同様の扱いで,そのコピー元コンテナの比較子

オブジェクトを使う。

列 ヘッダは,

とする。

ヘッダ

一覧

Q

6

%

&

6

%%

 6

0

 6

0

&

6


)

 6

0

 6

0

&

6

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

 6

0

 6

0

&

R

ヘッダ

一覧

Q

6

%

&

6

%%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

 6

0

 6

0

&

R

ヘッダ

一覧

Q

7

%

&

7

%%

70

70

&

7

70

70

&

7

[%

70

70

&

7

70

70

&

7

%

70

70

&

7

%

70

70

&

7

%

7

%

733P

P&

R

ヘッダ

一覧


)

Q

7

%

&

7

%%

70

70

&

7

70

70

&

7

[%

70

70

&

7

70

70

&

7

%

70

70

&

7

%

70

70

&

R

ヘッダ

一覧

Q

6

%

&

6

%%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

 6

&

6

%%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&


)

6

 6

0

 6

0

&

R

クラステンプレート

は,両端列と呼ばれる列データ構造として,

)同様にラ

ンダムアクセス反復子を備える。さらに,先頭 及び 末尾への定数時間での挿入 及び 消去を備える。中間での挿入

及び 消去は,線形時間とする。すなわち,両端列は,先頭末尾での要素の追加

1 !

及び 取出し

1

1

に特に最

適化されている。

同様,記憶域管理は,自動的とする。

は,コンテナ,逆進可能コンテナ(

の表)及び 列の全要件を,付加的な列要件(

)を含めて満

たす。

では,

上の演算について,他の表で記述されていない演算 及び 追加意味情報をもつ演算を規定

する。

Q

6

%

Q

3

''

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

P&

6

P&

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

+*(+(L(L

構築・コピー・解体

60

%

6&

$P

0

%

60

%

6&

<<

<<

<<

60

%

6&

 6

0

&

X&

 6

0

%

 6

0

&

<<

<<

<<

&

$P

0

&

P

P

&

''

反復子

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

+*(+(L(+

容量

$P

$

&

$P

P$

&

$$P

$

%

&

&

''

要素アクセス

ST$P

&

P

ST$P

&


)#

$P

&

P

$P

&

&

P

&

&

P

&

''

+*(+(L(*

修飾子

P

0

&

P

0

&

0

&

$P

0

&

<<

<<

<<

&

P&

P&

&

&

 6

0

&

&

R&

6

%%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&

''

特化アルゴ リズム

6

 6

0

 6

0

&

R

のコンスト ラクタ,コピー 及び 代入

:)

,

:

効果  割付け子を用いて,空の両端列を構築する。

計算量  定数。

'

(

)

!

,

(

:)

,

:

効果  割付け子を用いて,

個のコピーからなる両端列を構築する。

計算量  

に比例する。

/

==0

==

(

==

(

:)

,

:


)(

効果  指定された割付け子を用いて,区間

7

に対応する両端列を構築する。

計算量  

回,コピーコンストラクタを呼び出す。

/

==0

!

==

(

==

効果  

&

&

!

'

(

)

効果  

&

&

容量

!

''

'(

,

効果  

$

$

$V$

&

$

$

)$

&

&

''

何もしない

変更子

(

)

!

(

'

(

)

/

==0

!

(

==

(

==

効果  両端列

の中間に挿入すると,両端列の要素へのすべての反復子 及び 参照が無効になる。両端列の先頭

又は 末尾に挿入すると,その両端列へのすべての反復子が無効になるが,両端列の要素への参照については無効にな

らない。

参考

のコピーコンストラクタ 又は 代入演算子以外のものから例外が送出された場合,何の効果ももたらさ

ない。

計算量  最も多いとき,両端列への単一要素の挿入は,挿入点から先頭までの距離と挿入点から末尾までの距離との

最小の距離についての線形時間をとる。両端列の先頭 又は 末尾への単一要素の挿入は,定数時間をとり,

のコピー

コンストラクタへの呼出しを

回引き起こす。

(

効果  両端列の中間での消去は,両端列の要素へのすべての反復子 及び 参照を無効にする。両端列の端点での消去

は,消去要素への反復子 及び 参照だけを無効にする。

計算量  

デストラクタへの呼出しの回数は,消去要素の個数と同じとする。代入演算子の呼出し回数は,消去される

要素の,前の要素の個数と後の要素の個数との小さいほうと高々等価となる。

例外  

のコピーコンストラクタ 又は 代入演算子によって送出される例外を除き,例外を送出することはない。

この脚注は,

1

によって削除された。


))

特化アルゴリズム

/

(

:0

!

/(:0 )

(

/(:0)

効果  

(&

クラステンプレート

は,リストと呼ばれる,列データ構造として,両進反復子を備える。記憶

管理が自動的に処理され,列内のどこであれ定数時間の挿入演算 及び 消去演算を可能とする。

) 及

)とは異なり,リスト要素への高速なランダムアクセスは,備えていないが,多くのアルゴ リズム

は,逐次アクセスしか必要としない。

は,コンテナ 及び 逆進可能コンテナに対する全要件(

の二つの表で与える。) 並びに 列に対する全要

件を満たし ,付加要件(

)のほとんどを満たす。例外として,メンバ関数

ST

及び

が提供されな

では,

に対する演算のうち,これらの表に記述されていない演算 又は 追加意味情報をもつ演

算だけを示す。

Q

6

%

Q

3

''

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

P&

6

P&

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

+*(+(+(L

構築・コピー・解体

60

%

6&

$P

0

%

60

%

6&

<<

<<

<<

60

%

6&

 6

0

&

X&

 6

0

%

 6

0

&

<<

<<

<<

&

$P

0

&

P

P

&

''

反復子

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

+*(+(+(+

容量

&

メンバ関数は,ランダムアクセス反復子のコンテナにしか提供されない。


)

$P

$

&

$P

P$

&

$$P

$

%

&

''

要素アクセス

&

P

&

&

P

&

''

+*(+(+(*

修飾子

P

0

&

P&

P

0

&

P&

0

&

$P

0

&

<<

<<

<<

&

&

&

 6

0

&

&

''

+*(+(+(M

リスト演算

 6

0

&

 6

0

&

 6

0

&

0

&

C

PC

&

&

"C

"C

P&

 6

0

&

7

 6

0

7

&

&

7

7

&

&

R&

6

%%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&

''

特化アルゴ リズム

6

 6

0

 6

0

&


)*

R

のコンスト ラクタ,コピー 及び 代入

:)

,

:

効果  指定された割付け子を用いて,空のリストを構築する。

計算量  定数。

'

(

)

!

,

(

:)

,

:

効果  指定された割付け子を用いて,

個のコピーからなるリストを構築する。

計算量  

に比例する。

/

==0

==

(

==

(

:)

,

:

効果  割付け子を用いて,区間

7

に該当するリストを構築する。

計算量  

に比例する。

/

==0

!

==

(

==

効果  

&

&

!

'

(

)

効果  

&

&

容量

!

''

'(

,

効果  

$

$

$V$

&

$

$

Q

%

&

$&

&

R

&

''

何もしない

変更子

(

)

!

(

'

(

)

/

==0

!

(

==

(

==

!

)

!

4

)


参考

反復子 及び 参照の正当性には影響しない。例外が送出されると,何の効果ももたらさない。

計算量  リストへの単一要素の挿入は,定数時間とし,

のコピーコンストラクタを丁度

回呼び出す。リストへの

複数要素の挿入は,挿入される要素の個数に線形となり,

のコピーコンストラクタへの呼出しの回数は,挿入され

る要素の個数に正確に等しくなる。

(

!

!

4

!

効果  消去対象に指定された要素への反復子 及び 参照だけを無効とする。

例外  

なし 。

計算量  単一要素の消去は,

のデストラクタへの

回の呼出しを備えた定数時間の演算とする。リスト内の区間の

消去は,区間の距離の線形時間とし ,型

のデストラクタの呼出し回数は,正確に区間の距離に等しい。

演算

リストでは,中間での高速の挿入 及び 消去が可能なので,特に専用の演算を提供する。

は,破壊的に要素を一つのリストから別のリストに移す三つの接合演算を提供する。

!

(

/(:0)

要件  

0

[%

効果  

の前に

の内容を挿入し ,

を空にする。リスト

へのすべての反復子 及び 参照を無効にする。

例外  

なし

計算量  定数時間。

!

(

/(:0)

(

効果  

の前にリスト

で指される要素を挿入し ,その要素を

から取り除く。

%%

又は

%%

))

のとき,結果は変わらない。接合された要素への反復子 及び 参照だけを無効とする。

例外  

なし

要件  

は,

の正当な参照はずし可能な反復子とする。

計算量  定数時間。

!

(

/(:0)

(

(

効果  

の前に区間

7

にある要素を挿入し ,

からその要素を取り除く。

要件  

7

は,

における正当な区間とする。

がその区間

7

の反復子のとき,結果

は未定義とする。接合された要素への反復子 及び 参照だけを無効とする。

例外  

なし

計算量  

0

%%

のとき定数時間,それ以外のとき線形時間。

!

!

)

!

/

80

!

!8

効果  

次の条件が成り立つリスト反復子

で参照されるリストのすべての要素を消去する。

!

%%

!

[%

例外  

!

%%

又は

!

[%

の評価によって送出される例外に限られる。

参考

安定性:取り除かれない要素の相対順序は,元のリストでの相対順序に等しい。

計算量  

を正確に

$

回適用する。

!

/

F80

!

F8


効果  区間

7

の反復子

によって参照される等価要素のあらゆる連続群から最初以外のすべての要素を

削除する。ここで等価要素とは,

( 実引数

のない

については )

!

%%

!VL

又は( 実引数

をも

については )

!

!

V

L

が成り立つ要素をいう。

例外  

!

%%

!VL

又は

!

!

V

L

の評価によって送出される例外に限られる。

計算量  区間

が空でない場合,正確に

回の

を適用する。空の場合,

の適用はない。

!

/(:0)

/

#0

!

/(:0)

(

#

要件  

は,弱全順序

#

を定義しなければならない。リスト 及び 実引数リストは,この順序で整列してい

なければならない。。

効果  実引数のリストをリストに併合する。

参考

安定性:二つのリストの同値な要素については,元からのリストの要素が実引数リストの要素に先行す

る。併合後

は空となる。

計算量  高々

$

)

($

V

L

回の比較。比較以外で例外が送出された場合,効果はもたらさない。

!

!

効果  リストの要素の順序を反転する。

例外  

なし

計算量  線形時間

!

/

#0

!

#

要件  

( 関数の場合)又は

(テンプレートの場合)が弱全順序(

#

)を定義していなければなら

ない。

効果  

又は

7

関数オブジェクトに従ってリストを整列する。

参考

安定性:同値な要素の相対順序は保存される。例外が送出された場合,リスト内の要素の順序がど うな

るかは不定とする。

計算量  

$

として。ほぼ

回の比較。

#

特化アルゴリズム

/

(

:0

!

/(:0)

(

/(:0)

効果  

(&

コンテナアダプタ

コンテナアダプタは,それぞれ

7

テンプレートを仮引数にとる。各コンストラ

クタは,

7

を参照する実引数をもつ。これらで与えられたコンテナが,各アダプタの

7

メンバに

コピーされる。

クラステンプレート

演算

及び

を備える任意の

列は,

を具現するのに使うことができる。特に,

)及び

)を使うことができる。

Q

7

%

Q

3

733

P

P&

733$P

$P&

7

P&

3

7

&

3

70

%

7&


Q

(&

R

$P

$

Q

($&

R

P0

Q

(&

R

P0

Q

(&

R

P0

Q

(&

R

P0

Q

(&

R

P0

Q

(P&

R

Q

(P&

R

R&

7

%%

70

70

&

7

70

70

&

7

[%

70

70

&

7

70

70

&

7

%

70

70

&

7

%

70

70

&

R

,,

返却値  

(

%%

(

/

返却値  

(

(

クラステンプレート

ランダ ムアクセス反復子をもち,演算

を備える任意の列は,

のインスタンス化に使うことができる。特に,

及び 両端列(

)を使うことができる。

のインスタンス化には,優先度比較を行うための関数

又は 関数オブジェクトの供給も含む。このライブラリは,弱全順序(

#

)を定義する関数 又は 関数オブジェクト

を仮定する。

Q

7

%

7

%

733

P

P

Q

3

733

P

P&

733$P

$P&

7

P&

3

7

&

7

&

3

P

70

%

7

70

%

7&

<<

P<

<

<<

70

%

7

70

%

7&

Q

(&

R


$P

$

Q

($&

R

P0

Q

(&

R

P0

&

&

R&

''

等価性演算は,提供されない

R

のコンスト ラクタ

#)

,

#(

#)

,

#

要件  

は,弱全順序(

#

)を定義する。

効果  インスタンス変数の

で初期化し,インスタンス変数の

で初期化する。

(

(

を呼び出す。

/

==0

==

(

==

(

#)

,

#(

#)

,

#

要件  

は,弱全順序(

#

)を定義する。

効果  インスタンス変数の

で初期化し ,インスタン ス変数の

で初期化する。

((

を呼び出す。最後に,

(

(

を呼び出す。

のメンバ

!

!)

効果  

(P&

P(

(

&

!

効果  

P(

(

&

(P&

クラステンプレート

演算

を備える任意の列は,

を具

現するのに使うことができる。特に,

),

)及び

)を使うことができる。

Q

7

%

Q

3

733

P

P&

733$P

$P&

7

P&

3

7

&

3

70

%

7&

Q

(&

R

$P

$

Q

($&

R

P0

Q

(&

R

P0

Q

(&

R

P0

Q

(P&

R

Q

(P&

R

R&


7

%%

70

70

&

7

70

70

&

7

[%

70

70

&

7

70

70

&

7

%

70

70

&

7

%

70

70

&

R

クラステンプレート

ベクトル

は,ランダムアクセス反復子を備える列とする。さらに,端点

での(ならし )定数時間の挿入演算 及び 消去演算を備える。中間での挿入操作 及び 消去操作は線形時間とする。記

憶域管理は自動的に行われるが,効率改善のためにヒントを与えてもよい。ベクトルの要素は,連続した場所に蓄えら

れる。すなわち,

以外の型とし,

を型

6

のベクトルとした場合,

%$

となるすべての

について,同一性

0ST

%%

0S.T

)

が成り立つ。

は,コンテナ,逆進可能コンテナの要件(

の二つの表で与える。)及び 列の要件をすべて満たす。追

加要件(

)についても,そのほとんどを満たす。例外として,

の演算

及び

ンバ関数が提供されない。

では,それらの表に記述のない,又は 追加意味情報をもつ

の演算だけを記

述する。

Q

6

%

Q

3

''

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

P&

6

P&

633

&

633

P

P

33P

P

&

33P

P

PP

&

''

+*(+(M(L

構築・コピー・解体

60

%

6&

$P

0

%

60

%

6&

<<

<<

<<

60

%

6&

 6

0

&

X&

 6

0

%

 6

0

&

<<

<<

<<

&

$P

0

&

P

P

&

''

反復子


#

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

+*(+(M(+

容量

$P

$

&

$P

P$

&

$$P

$

%

&

$P

&

&

$P

&

''

要素アクセス

ST$P

&

P

ST$P

&

P

$P

&

$P

&

&

P

&

&

P

&

''

+*(+(M(*

修飾子

P

0

&

P&

0

&

$P

0

&

<<

<<

<<

&

&

&

 6

0

&

&

R&

6

%%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&

''

特化アルゴ リズム

6

 6

0

 6

0

&

R

のコンスト ラクタ,コピー 及び 代入


(

!

:)

,

:

!'

(

)

!

,

(

:)

,

:

/

==0

!==

(

==

(

:)

,

:

!

!/(:0)

計算量  

及び

が ,前進反復子,両進反復子,又は ランダ ムアクセス反復子の場合,コン ストラクタ

<<

<<

<<

は,

のコピーコン

ストラクタ(

との距離とする。)を

回呼び出すだけで,再割付けを行わない。反復子

が単なる入力反復子に過ぎない場合,

のコピーコンストラクタの

回程度の呼出し 及び

回程度の

再割付けを行う。

/

==0

!

==

(

==

効果  

&

&

!

'

(

)

効果  

&

&

容量

'

返却値  再割付けを要しないでベクトルが保持できる最大の要素数。

!

!'

のサイズ変更を伝える指令とし,それを利用して,

の記憶域割付けを管理することができる。再割

付けが生じたとき,

を呼び出した後,

の値は,次のとおりとする。

再割付けが生じた場合,

に与えた実引数の値以上となる。

再割付けが生じない場合,

の以前の値と等しい。

その時点での容量が

に与えた実引数より小さい場合に限り,その時点で再割付けが生じる。

計算量  列のサイズの高々線形時間となる。

$

の呼出し自身は,列のサイズを変更しない。

例外  

$

のとき,

を送出する。

参考

再割付けは,列の要素へのすべての参照,ポインタ 及び 反復子を無効にする。

の呼出しが

行われても,挿入操作を行ってベクトルの寸法が直近の

の呼出しの実引数に指定した値より大

きくならない限り,例外が送出されることはない。

!

''

'(

,

効果  

$

$

$V$

&

$

$

)$

&

&

''

何もしない

は,適切な例外を送出する

"

を使う。


)

変更子

(

)

!

(

'

(

)

/

==0

!

(

==

(

==

参考

新しいサイズが古い容量より大きい場合,再割付けを生じる。再割付けが生じない場合,挿入点より前

のすべての反復子 及び 参照は,正当とする。例外が生じた場合,

のコピーコンストラクタ 又は 代入演

算子による例外発生を除き,何の効果ももたらさない。

計算量  

及び

が ,前進反復子,両進反復子 又は ランダ ムアクセス反復子の場合,計算量は,区間

7

内の要素数にベクトルの末尾への距離を加えた値に比例する。

及び

が入力反復子の場合,

計算量は,区間

7

内の要素数にベクトルの末尾への距離を乗じた値に比例する。

(

効果  消去した位置より後のすべての反復子 及び 参照を無効とする。

計算量  

のデストラクタが,消去される要素の個数と同じ回数だけ呼ばれる。

の代入演算子は,消去される要素

の後に並ぶベクトルの要素の個数と同じ回数だけ呼ばれる。

例外  

のコピーコンストラクタ 又は 代入演算子によって送出される例外以外はない。

特化アルゴリズム

/

(

:0

!

!/(: 0)

(

!/(:0)

効果  

(&

#

クラス

領域割付けを最適化するために,

%

型の要素に対する

の特殊化が提供さ

れている。

Q

6

6

Q

3

''

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

P&

6

P&

処理系定義

&

処理系定義

P

33P

P

&

33P

P

PP

&

''

ビット参照

Q

&

&

3

X&

&

0

%

&

0

%

0

&

&

''

ビットを反転する

R&

''

構築・コピー・解体

60

%

6&


$P

0

%

60

%

6&

<<

<<

<<

60

%

6&

 6

0

&

X&

 6

0

%

 6

0

&

<<

<<

<<

&

$P

0

&

P

P

&

''

反復子

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

容量

$P

$

&

$P

P$

&

$$P

$

%

&

$P

&

&

$P

&

''

要素アクセス

ST$P

&

P

ST$P

&

P

$P

&

$P

&

&

P

&

&

P

&

''

修飾子

P

0

&

P&

0

&

$P

0

&

<<

<<

<<

&

&

&

 6

0

&

&

&

''

全ビットを反転する

&

R&

6

%%

 6

0

 6

0

&

6

 6

0

 6

0

&

6


*

[%

 6

0

 6

0

&

6

 6

0

 6

0

&

6

%

 6

0

 6

0

&

6

%

 6

0

 6

0

&

''

特化アルゴ リズム

6

 6

0

 6

0

&

R

は,

の単一ビットの参照の振る舞いを模倣するクラスとする。

連想コンテナ

ヘッダ

及び

は,次のとおりとする。

ヘッダ

一覧

Q

>

7

%

>

6

%

>

&

>

7

6

%%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

[%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

%

>  7

6

0

>  7

6

0

&

>

7

6

%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

%

>

6

%

>

&

>

7

6

%%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

[%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

%

>  7

6

0

>  7

6

0

&

>

7

6


*

%

>  7

6

0

>  7

6

0

&

>

7

6

>

 7

6

0

>  7

6

0

&

R

ヘッダ

一覧

Q

>

7

%

>

6

%

>

&

>

7

6

%%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

[%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

%

> 7

6

0

> 7

6

0

&

>

7

6

%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

%

>

6

%

>

&

>

7

6

%%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

[%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

%

> 7

6

0

> 7

6

0

&

>

7

6

%

> 7

6

0

> 7

6

0

&

>

7

6

>

7

6

0

> 7

6

0

&

R

クラステンプレート

は,一意キーを備える( 高々一つのキー値を保持する )連想コンテナとし ,

キーに基づく他の型

の値の高速検索を提供する。クラス

は,両進反復子を備える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,一意

キーのためのほとんどの演算(

)も提供する。すなわち,

が,

)の演算

を備えているが,演


*

を備えていない。

>

については,

>

とし,

>

とす

る。

では,これらの

の演算のうち,表のいずれでも記述されていない演算 又は 追加意味情報をもつ演算

だけを示す。

Q

>

7

%

>

6

%

>

Q

3

''

>

P&

P&

>

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

P

3

P

P

P

Q

&

3

7

&

P7

3

QR

3

P0

P0

Q

(

(&

R

R&

''

+*(*(L(L

構築・コピー・解体

70

%

7

60

%

6&

<<

<<

<<

70

%

7

60

%

6&

>  7

6

0

&

X&

>  7

6

0

%

>  7

 6

0

&

P

P

&

''

反復子

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

容量

&

$P

$

&

$P

P$

&


*

''

+*(*(L(+

要素アクセス

0

ST

P0

&

''

修飾子

P0

&

P0

&

<<

<<

<<

&

&

$P

P0

&

&

>

7

6

0

&

&

''

観察子

P

P

&

P

P

&

''

+*(*(L(*

演算

P0

&

P

P0

&

$P

P0

&

P

P0

&

P

P

P0

&

P

P0

&

P

P

P0

&

P

P0

&

P

P

P

P0

&

R&

>

7

6

%%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

[%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

%

>  7

6

0

>  7

6

0

&

>

7

6

%

>  7

6

0

>  7

6

0

&

''

特化アルゴ リズム

>

7

6

>

7

6

0

>  7

6

0

&

R

のコンスト ラクタ,コピー 及び 代入

#)

,

#(

:)

,

:

効果  比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。


*

計算量  定数。

/

==0

==

(

==

(

#)

,

#(

:)

,

:

効果  比較子オブジェクト 及び 割付け子を用いて空の

を構築し ,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

の比較の下で整列している場合,

に比例する。そうでない場合,

に比例する。ここで,

とする。

要素アクセス

)

*+

4)

返却値  

!

((

演算

4)

4)

4)

4)

4)

4)

/(

0

4)

/(

0

4)

メンバ関数

,

,

及び

は,それぞれ,定値の版 及び 非定値の版をもつ。

二つの関数の振る舞いは,定値の版は

を返し ,非定値の版は

を返すこと(

)を除

いて,同一とする。

特化アルゴリズム

/

G(

(

#(

:0

!

/G((#( :  0)

(

/G((#(: 0)

効果  

(&

クラステンプレート

は,同値キー に対応する( 同じキー値の多重コピーを保持し う

る)連想コンテナとし ,キーに基づいた他の型

の値の高速検索を提供する。クラス

は,両進反復子を備

える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,同値キー のための演算(

)のほとんど も提供する。すなわち,

は,

)の演算

を備

えるが,演算

を備えていない。

>

については,

>

とし ,

>

とする。

では,

の演算のうち,表のいずれでも記述されていない演算 又は 追加意味

情報をもつ演算だけを示す。

Q

>

7

%

>

6

%

>

Q

3

''

>

P&

P&


*

>

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

P

3

P

P

P

Q

&

3

7

&

P7

3

QR

3

P0

P0

Q

(

(&

R

R&

''

構築・コピー・解体

70

%

7

60

%

6&

<<

<<

<<

70

%

7

60

%

6&

>

7

 6

0

&

X&

>  7

6

0

%

>  7

 6

0

&

P

P

&

''

反復子

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

容量

&

$P

$

&

$P

P$

&

''

修飾子

P0

&

P0

&

<<

<<

<<

&

&

$P

P0

&

&

>

 7

 6

0

&

&


*#

''

観察子

P

P

&

P

P

&

''

演算

P0

&

P

P0

&

$P

P0

&

P

P0

&

P

P

P0

&

P

P0

&

P

P

P0

&

P

P0

&

P

P

P

P0

&

R&

>

7

6

%%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

[%

>  7

6

0

>  7

6

0

&

>

7

6

>  7

6

0

>  7

6

0

&

>

7

6

%

>  7

6

0

>  7

6

0

&

>

7

6

%

>  7

6

0

>  7

6

0

&

''

特化アルゴ リズム

>

7

6

>

 7

6

0

>  7

6

0

&

R

のコンスト ラクタ

#)

,

#(

:)

,

:

効果  比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。

計算量  定数。

/

==0

==

(

==

(

#)

,

#(

:)

,

:

効果  比較子オブジェクト 及び 割付け子を用いて空

を構築し ,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

を用いて整列している場合,

に比例する。そうでない場合,

比例する。ここで,

は,

とする。

演算


*(

4)

4)

4)

4)

/(

0

4)

/(

0

4)

メンバ関数

,

,

及び

は,それぞれ,定値の版 及び 非定値の版をもつ。

それぞれの場合,定値の版が

を返し ,非定値の版が

)を返すことを除いて,二

つの版の振る舞いは,同一とする。

特化アルゴリズム

/

G(

(

#(

:0

!

/G((#  (:  0 )

(

/G((#(:  0 )

効果  

(&

クラステンプレート

は,一意キーを備える( 高々一つのキー値を保持する )連想コンテナとし ,

キーそのものの高速検索を提供する。クラス

は,両進反復子を備える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,一意

キーのための(

)で記述されたほとんどの演算も提供する。すなわち,

は,

)の演算

を備

えるが,演算

を備えていない。

>

については,

及び

>

とする。

の記

述は,表のいずれでも記述されていないか 又は 追加意味情報をもつ

の演算だけについてとする。

Q

>

7

%

>

6

%

>

Q

3

''

>

P&

>

P&

7

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

+*(*(*(L

構築・コピー・解体

70

%

7

60

%

6&

<<

<<

<<

70

%

7

60

%

6&

> 7

 6

0

&

X&

> 7

6

0

%


*)

> 7 6

0

&

P

P

&

''

反復子

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

容量

&

$P

$

&

$P

P$

&

''

修飾子

P0

&

P0

&

<<

<<

<<

&

&

$P

P0

&

&

> 7

 6

0

&

&

''

観察子

P

P

&

P

P

&

''

集合演算

P0

&

$P

P0

&

P

P0

&

P

P0

&

P

P0

&

R&

>

7

6

%%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

[%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

%

> 7

6

0

> 7

6

0

&

>

7

6

%

> 7

6

0

> 7

6

0

&

''

特化アルゴ リズム

>

7

6

> 7

6

0


*

> 7

6

0

&

R

のコンスト ラクタ,コピー 及び 代入

#)

,

#(

:)

,

:

効果  比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。

計算量  定数。

/

==0

==

(

(

#)

,

#(

:)

,

:

効果  比較子オブジェクト 及び 割付け子を用いて空の

を構築し ,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

の比較の下で整列している場合,

に比例する。そうでない場合,

に比例する。ここで,

とする。

特化アルゴリズム

/

G(

#(

:0

!

/G(#(:  0 )

(

/G(#(:0 )

効果  

(&

クラステンプレート

は,同値キーに対応する( 同じキー値の多重コピーを保持し うる)

連想コンテナとし ,キーそのものの高速検索を提供する。クラス

は,両進反復子を備える。

は,コンテナ,逆進可能コンテナ(

)及び 連想コンテナ(

)の要件すべてを満たす。

は,多重キーのための

で記述されたほとんど の演算も提供する。すなわち,

は,

)の演算

を備えるが,演算

を備えていない。

>

については,

及び

>

する。

では,表のいずれでも記述されていないか 又は 追加意味情報をもつ

の演算だけについて記

述する。

Q

>

7

%

>

6

%

>

Q

3

''

>

P&

>

P&

7

P&

7

P&

6

P&

633

&

633

P

P&

処理系定義

&

''

+*(L

参照

処理系定義

P&

''

+*(L

参照

処理系定義

$P&

''

+*(L

参照

処理系定義

P&'

'

+*(L

参照

633

&

633

P

P&

33P

P

&

33P

P

PP

&

''

構築・コピー・解体

70

%

7

60

%

6&

<<


**

<<

<<

70

%

7

60

%

6&

> 7

 6

0

&

X&

> 7

 6

0

%

> 7

 6

0

&

P

P

&

''

反復子

&

P

&

&

P

&

P

&

PP

&

P

&

PP

&

''

容量

&

$P

$

&

$P

P$

&

''

修飾子

P0

&

P0

&

<<

<<

<<

&

&

$P

P0

&

&

>

7

 6

0

&

&

''

観察子

P

P

&

P

P

&

''

集合演算

P0

&

$P

P0

&

P

P0

&

P

P0

&

P

P0

&

R&

>

7

6

%%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

[%

> 7

6

0

> 7

6

0

&

>

7

6

> 7

6

0

> 7

6

0

&

>

7

6

%

> 7

6

0

> 7

6

0

&

>

7

6


%

> 7

6

0

> 7

6

0

&

''

特化アルゴ リズム

>

7

6

>

7

6

0

> 7

6

0

&

R

のコンスト ラクタ

#)

,

#(

:)

,

:

効果  比較子オブジェクト 及び 割付け子を用いて,空の

を構築する。

計算量  定数。

/

==0

==

(

(

#)

,

#(

:)

,

:

効果  

比較子オブジェクト 及び 割付け子を用いて,空の

を構築し,区間

7

の要素を挿入する。

計算量  

区間

7

がすでに

の比較の下で整列している場合,

に比例する。そうでない場合,

に比例する。ここで,

とする。

特化アルゴリズム

/

G(

#(

:0

!

/G(# (:   0)

(

/G(#(:  0)

効果  

(&

#

クラステンプレート

ヘッダ

一覧

''

$P

のためのヘッダ

''

P

P

P

''

及び

P

のためのヘッダ

''

のためのヘッダ

Q

$P

A

&

''

+*(*(/(*

演算

$P

A

A

0

A0

A0&

$P

A

A

1

A0

A0&

$P

A

A

W

A0

A0&

$P

A

P

0

P

0

A0

&

$P

A

P

0

P

0

A0

&

R

ヘッダ

は,ビットの固定長列を表現し操作するためのクラステンプレート 及び 関係する関数を定義する。

Q

$P

A

Q

3

''

ビット参照


Q

&

&

3

X&

0

%

&

''

ST

%

&

0

%

0&

''

ST

%

ST&

X

&

''

&

''

%

ST&

0

&

''

ST(&

R&

''

+*(*(/(L

コンストラクタ

&

&

6

P

 6

0

P

 6

33

$

P

%

.

P

 6

33

$

P

%

P

 6

3

3

&

''

+*(*(/(+

演算

A0

0%

A0

&

A0

1%

A0

&

A0

W%

A0

&

A0

%$P

&

A0

%$P

&

A0

&

A0

$P

%

&

A0

&

A0

$P

&

A

X

&

A0

&

A0

$P

&

''

要素アクセス

ST$

P

&

''

ST&

のため

ST$

P

&

''

ST&

のため

P

&

6

P

6

P

&

$P

&

$P

$

&

%%

A0

&

[%

A0

&

$P

&

&

&

A

$

P

&

A

$

P

&

R&

R

クラステンプレート

A

は,固定長

A

ビットからなる列を格納できるオブジェクトを記述する。

各ビットは,値ゼロ( 解除)又は

( 設定)を表現する。ビットを反転するとは,値のゼロを

に,

をゼロに変

えることとする。各ビットは,非負の位置

をもつ。クラス

A

のオブジェクトと汎整数型の値との間の

変換においては,ビット位置

は,ビット値

:L

;

に対応する。二つ以上のビットに対応する汎整数値は,

各ビット値の和とする。

で記述する関数は,それぞれ異なる例外に関連する,次の

種類のエラーを報告する。

不当な実引数エラーは,型

*

)の例外に関連する。

区間外エラーは,型

*#

)の例外に関連する。


オーバフローエラーは,型

*

)の例外に関連する。

#

のコンスト ラクタ

効果  クラス

A

のオブジェクトを,すべてのビットをゼロに初期化して,構築する。

!

効果  クラス

A

のオブジェクトを,最初から

個のビ ット位置を

の対応するビット値に初期化して,

構築する。

は,

A

と値

7;6E

"<

!

$

との小さいほうとする

A

のとき,残り

のビット位置は,ゼロに初期化される。

/

(

(

:0

/(

(

:0)

(

/(

(

:0&&'

,

(

/(

(

:0&&'

,

/(

(

:0&&

要件  

($

例外  

($

のとき,

を送出する。

効果  初期化する文字列の実効長

(

0

を,

($

との小さいほうと決定する。位置

で始まる

における

(

0

文字のどれかが

又は

でないとき,関数は,

を送出する。それ以外のとき,

関数は,クラス

A

のオブジェクトを,最初から

個のビット位置を文字列

の対応する文字から決定さ

れる値に初期化して,構築する。

は,

A

(

0

の小さいほうとする。

構築される文字列の要素の値は,位置

で始まる

の対応する文字が

のとき,ゼロとする。それ以外のと

き,要素の値は

とする。文字位置

:

#

;

が,ビット位置ゼロに対応する。引き続き減少する文字位置は,

増大するビット位置に対応する。

A

のとき,残りのビット位置は,ゼロに初期化される。

#

のメンバ

/0)

),

/0)

効果  

!

の指すオブジェクトの中の,

の対応するビットがクリアされているビットをクリアする。そうでな

いビットは変更しない。

返却値  

!

/0)

H,

/0)

効果  

!

の指すオブジェクトの中の,

の対応するビットがセットされているビットをセットする。そうでな

いビットは変更しない。

返却値  

!

A0

W%

A0

&

!

の指すオブジェクトの中の,

の対応するビットがセットされているビットを反転する。そうでないビッ

トは変更しない。

返却値  

!

/0)

//,'

効果  

!

の指すオブジェクトの中の位置

/

の各ビットを,次に示す値で置き換える。

/

のとき,新しい値をゼロとする。

/

のとき,新しい値を位置

/

のビットの以前の値とする。

返却値  

!

/0)

00,'

マクロ

7D"E

,

は,

)で定義する。


効果  

!

の指すオブジェクトの中の位置

/

の各ビットを,次に示す値で置き換える。

A

/

のとき,新しい値をゼロとする。

A

/

のとき,新しい値を位置

/

#

のビットの以前の値とする。

返却値  

!

/0)

効果  

!

のすべてのビットをセットする。

返却値  

!

/0)

'

(

!

,

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

効果  

!

において,位置

のビットに新しい値を格納する。

が非ゼロのとき格納値を

,それ以外のとき

ゼロとする。

返却値  

!

/0)

効果  

!

内の全ビットをリセットする。

返却値  

!

/0)

'

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

効果  

!

において,位置

のビットをリセットする。

返却値  

!

/0

.

効果  クラス

A

のオブジェクト

を構築し ,

!

で初期化する。

返却値  

(

/0)

効果  

!

内の全ビットを反転する。

返却値  

!

/0)

'

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

効果  

!

内の位置

のビットを反転する。

返却値  

!

例外  

!

内のビットに対応する汎整数値

が型

で表現できない場合,

を送出

する。

返却値  

/

(

(

:0

/(

(

:0

効果  

適当な型の文字列オブジェクトを構築し ,長さ

A

文字の文字列に初期化する。各文字は,

!

内の対応ビッ

ト位置の値で決定される。文字位置

A

は,ビット位置ゼロに対応する。引き続き減少する文字位置は,増大する

ビット位置に対応する。ビット値ゼロは,文字

.

になり,ビット値

は,文字

L

になる。

返却値  生成されたオブジェクト。


'

返却値  

!

内のセットされているビットの個数。

'

'

返却値  

A

,,

/0)

返却値  

!

内の各ビットの値が

の対応するビットの値に等しい場合,非ゼロ値を返す。

-,

/0)

返却値  

[!

%%

のとき,非ゼロ値を返す。

'

要件  

は妥当とする。

例外  

が妥当なビット位置に対応しない場合,

を送出する。

返却値  

!

内の位置

のビットが値

のとき,

を返す。

返却値  

!

内のいずれかのビットが値

のとき,

を返す。

返却値  

!

内のどのビットも値

でない場合,

を返す。

/0

//'

返却値  

A!

%

/0

00'

返却値  

A!

%

*+'

要件  

は妥当とする。

例外  

なし 。

返却値  

/0&&

*+'

要件  

は妥当とする。

例外  

なし 。

返却値  型

A33

のオブジェクトであって,条件

!ST

%%

V

を満たし ,

!ST

%

V

と等価なものを返す。

#

演算

/0

)

/0)

(

/0)

返却値  

A

0%

/0

H

/0)

(

/0)

返却値  

A

1%

/0

I

/0)

(

/0)

返却値  

A

%

/

(

(

'

0

/(

0)

00/  (

0)

(

/0)


#

書式付き入力関数(

)(

効果  

から

A

個(バイト単位)の文字をできるだけ抽出する。これらの文字を型

の一時オブジェクト

に格納する。そして,式

%

A

を評価する。文字は,次のどれかが生じるまで,抽出され格納される。

A

文字が抽出され格納された。

入力列上でファイルの終わりが生じた。

次の入力文字が

.

でも

L

でもなかった(この場合,その入力文字は抽出されない。)

に文字が格納されない場合,

(

33

が呼ばれる。

(これは,

33

を送

出するかもしれない。)

)

参照)

返却値  

/

(

(

'

0

/(

0)

///  (

0)

(

/0)

返却値  

(

を返す(

)(#

参照)

反復子

では,

"##

プログラムがコンテナ(

),ストリーム(

)(

)及び ストリームバッファ(

)#

の上で反復処理を遂行するのに使うライブラリを規定する。

ここで規定する項目を,

)

に示す。

)

 反復子ライブラリの要約

箇条

ヘッダ

要件

反復子の基本的要素

あらかじめ定義された反復子

#

ストリーム反復子

反復子に対する要件

反復子は,

"##

プログラムが異なるデータ構造

コンテナ

を一様に扱えるようなポイ

ンタの一般化とする。異なる種類のデータ構造に正確かつ効率的に働くテンプレートアルゴ リズムを構築できるよう

にするため,ライブラリは,反復子のインタフェースだけでなく意味論 及び 計算量の仮定を形式化する。すべての

反復子

は,式

!

を受け付ける。結果は,クラス,列挙体,又は 組込み型

の値とし ,その型を反復子の値型と呼

ぶ。式

!(

が適切に定義されたすべての反復子

は,

!(

と同じ意味の式

V

を受け付ける。等価性が定義

されたすべての反復子型

5

については,反復子の差分型と呼ばれる符号付き汎整数型が対応する。

反復子は

,

ポインタの抽象なので,その意味論は,

"##

でのポインタの意味論のほとんどを一般化したものとな

る。したがって,反復子を取るすべての関数テンプレートは,本来のポインタに対しても働くことが保証されている。

この規定は,演算に基づいて反復子を五つのカテゴ リ,入力反復子,出力反復子,前進反復子,両進反復子 及び ラ

ンダムアクセス反復子に分類する(

)

参照)

)

 反復子カテゴリの関係

ランダムアクセス

→両進

→前進

→入力

→出力

前進反復子は,入力反復子・出力反復子のすべての要件を満たす。したがって,入力反復子 又は 出力反復子が規

定されている箇所であればどこにでも使うことができる。両進反復子は,前進反復子のすべての要件を満たす。した

がって,前進反復子が使える箇所であればどこにでも使うことができる。ランダムアクセス反復子は,両進反復子の

すべての要件を満たす。したがって,両進反復子が使える箇所であればどこにでも使うことができる。

前進反復子,両進反復子 及び ランダムアクセス反復子のカテゴ リに加えて,反復子

は,式

!

の結果が参照と

して振る舞うか定数への参照として振る舞うかに応じて,変更可能 又は 定数という。定数反復子は,出力反復子の

要件を満たさず( 定数反復子

の)式

!

の結果は,式中で左辺値が要求されるときに使ってはならない。

配列への元来のポインタが,配列の最終要素の次の位置を指すポインタ値の存在を保証するように,任意の反復子

型には,対応コンテナの最終要素の次の位置を指す反復子値が存在する。この値を,末尾の次の値と呼ぶ。式

!

定義されている反復子

を,参照はずし可能と呼ぶ。ライブラリは,末尾の次の値が参照はずし可能であるとは仮定

しない。反復子は,どのコンテナにも関連しない特異値をもつこともできる。


(

!

&

でのように )ポインタ

を未初期化で宣言した後では,ポインタ

が特異値をもつと常に仮

定する。

式の結果は,特異値に対しては未定義とする。ただし,特異値をもつ反復子への非特異値の代入だけは例外とする。こ

の場合,その特異値は,ほかの値をもつ場合と同様に,上書きされる。参照はずし可能な値は,常に非特異値とする。

反復子

が反復子

から到達可能であるとは,式

))

を有限回適用することによって

%%

となることとする。

から到達可能ならば ,それらは同じコンテナを参照している。

データ構造を操作するほとんどのライブラリのアルゴ リズムテンプレートは,区間を使うインタフェースをもつ。

区間は,計算の開始と終了を指し示す反復子の対とする。区間

S

は,空区間とする。一般に,区間

S

は,

データ構造の中の,

によって指される要素から始めて

によって指される要素を含まない手前までの要素を参照す

る。区間

S

は,

が到達可能であるとき,かつそのときに限って,正当であるという。正当でない区間へのラ

イブラリ関数の適用結果は,未定義とする。

反復子の全カテゴ リは,そのカテゴ リに対して(ならし )定数時間で実現可能な関数だけを要件とする。したがっ

て,反復子の要件表には,計算量の欄がない。

#

では,

及び

は,

5

の値を示す。

は,差分型

#

の値を示す。

及び

は,識別子

を示す。

は,値を示す。

入力反復子

クラス 又は 組込み型

5

は,

)

の式が正当ならば,

を値型とする入力反復子の要件を満た

す。ただし,

G

は型

のメンバのいずれかの型とする。

)

では,

%%

の定義域という用語は,通常の数学的意味で,

%%

が定義されている( 必要のある)対象値の集合

を表す。この集合は,時間とともに変化してよい。アルゴ リズムそれぞれは,使用する反復子の値に対する

%%

の定

義域に要件を追加することがある。このような要件は,そのアルゴ リズム中での

%%

及び

[%