C++ named requirements: Container
コンテナは、他のオブジェクトを格納し、その中に含まれるオブジェクトが使用するメモリの管理を担当するために使用されるオブジェクトです。
目次 |
要件
以下の型と値が与えられた場合:
| 型 | 定義 |
T
|
オブジェクト型 |
C
|
T
型のオブジェクトを含むコンテナクラス
|
| 値 | 定義 |
| u , v |
C
型または
const
C
型の値
|
| mv |
C
型の値
|
| cv | const C 型の値 |
| lhs , rhs |
C
型の左辺値
|
| i , j |
C::iterator
または
const
C
::
iterator
型の値
|
C
は、以下の型、文、および式が適切に形成され、指定された意味を持つ場合、
Container
の要件を満たします:
型
| 型 | 定義 | 要件 |
|---|---|---|
| typename C :: value_type |
T
|
T
は
CopyConstructible
(C++11まで)
Erasable
から
C
(C++11以降)
である。
|
| typename C :: reference |
T&
|
明示的な要件なし |
| typename C :: const_reference | const T & | |
| typename C :: iterator | イテレータ型 |
|
| typename C :: const_iterator | 定数イテレータ型 |
C::const_iterator
は
LegacyForwardIterator
であり、その
value type
は
T
である。
|
| typename C :: difference_type | 符号付き整数型 |
C::difference_type
は
C::iterator
および
C::const_iterator
の
difference type
と同じである。
|
| typename C :: size_type | 符号なし整数型 |
C::size_type
は
C::difference_type
のすべての非負の値を表現できるだけの大きさを持つ。
|
ステートメント
| ステートメント | セマンティクス | 計算量 | |||
|---|---|---|---|---|---|
|
C c
;
C c = C ( ) ; |
事後条件 | c. empty ( ) は true である。 | 定数時間 | ||
|
C c
(
v
)
;
C c = C ( v ) ; |
事前条件 |
|
線形時間 [1] | ||
| 事後条件 |
|
||||
| 注記 | |||||
|
|||||
式
| 式 | 型 | 意味論 | 計算量 | |||||
|---|---|---|---|---|---|---|---|---|
| C ( ) |
C
|
事後条件 | C ( ) . empty ( ) は true です。 | 定数 | ||||
| C ( v ) |
C
|
事前条件 |
|
定数時間 [1] | ||||
| 事後条件 |
|
|||||||
| lhs = v |
C&
|
事後条件 |
|
線形 | ||||
| v.~C ( ) | void | 効果 | v の全ての要素を破棄し、取得した全てのメモリを解放する。 | 線形 | ||||
| mv. begin ( ) |
C::iterator
|
効果 | mv の最初の要素を指すイテレータを返す。 | 定数 | ||||
| cv. begin ( ) |
C::const_iterator
|
効果 | cv の最初の要素を指すイテレータを返す。 | 定数 | ||||
| mv. end ( ) |
C::iterator
|
効果 | mv の終端イテレータを返す。 | 定数 | ||||
| cv. end ( ) |
C::const_iterator
|
効果 | cv の末尾イテレータを返す。 | 定数 | ||||
|
v.
cbegin
(
)
(C++11以降) |
C::const_iterator
|
効果 | const_cast < const C & > ( v ) . begin ( ) を返す。 | 定数 | ||||
|
v.
cend
(
)
(C++11以降) |
C::const_iterator
|
効果 | 次を返す const_cast < const C & > ( v ) . end ( ) 。 | 定数 | ||||
|
i
<=>
j
(C++20以降) |
std::strong_ordering | 制約 |
この式は、
C::iterator
がランダムアクセスイテレータの要件を満たす場合にのみ、適切に形成されることが要求されます。
|
定数 | ||||
| u == v | bool | 効果 |
次を返す
|
線形時間 [2] | ||||
| u ! = v | 効果 | ! ( u == v ) と同等。 | ||||||
|
lhs.
swap
(
rhs
)
swap ( lhs, rhs ) |
void | 効果 | lhs と rhs の内容を交換する。 | 定数時間 [3] | ||||
| v. size ( ) |
C::size_type
|
効果 | v の要素数 [4] を返す。 | 定数時間 | ||||
| v. max_size ( ) |
C::size_type
|
効果 |
型
C
のコンテナが保持可能な最大要素数を返す。
|
定数時間 | ||||
| v. empty ( ) | bool | 効果 | v. begin ( ) == v. end ( ) を返す。 | 定数時間 | ||||
|
オプションのコンテナ要件
(一部のコンテナタイプでのみ提供) |
||||||||
|
u
<=>
v
(C++20以降) |
synth-three-way-result
<
C
::
value_type
>
|
事前条件 |
T
が
three_way_comparable
をモデル化するか、または
operator
<
が型
T
および
const
T
の値に対して定義された全順序関係であること。
|
線形 | ||||
| 効果 |
std::
lexicographical_compare_three_way
(
u.
begin
(
)
, u.
end
(
)
,
v.
begin
(
)
, v.
end
(
)
,
synth-three-way
)
[5]
を返す
|
|||||||
| 注記 | ||||||||
|
||||||||
式
i
==
j
、
i
!
=
j
、
i
<
j
、
i
<=
j
、
i
>=
j
、
i
>
j
および
i
-
j
において、
i
および/または
j
が同じ要素を指す
C::const_iterator
型のイテレータで置き換えられた場合でも、意味は同じまま保持されます。
コンテナデータ競合
詳細は コンテナのスレッド安全性 を参照してください。
不具合報告
以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。
| DR | 適用対象 | 公開時の動作 | 正しい動作 |
|---|---|---|---|
| LWG 179 | C++98 |
iterator
と
const_iterator
型が比較不可能な可能性があった
|
比較可能であることが要求される |
| LWG 276 | C++98 |
T
が
CopyAssignable
であることが要求されていた
|
T
が
CopyConstructible であることが要求される |
| LWG 322 | C++98 |
iterator
と
const_iterator
の値型が指定されていなかった
|
T
として指定
|
| LWG 774 | C++98 | swap ( a, b ) に対する要件がなかった | 追加された |
| LWG 883 | C++98 |
a.
swap
(
b
)
が
swap
(
a, b
)
として定義され、
循環定義になっていた |
a
と
b
の値を交換する
として定義 |
| LWG 1319 | C++98 |
iterator
と
const_iterator
がマルチパス保証を持たない可能性があった |
これらが
LegacyForwardIterator の要件を 満たすことが要求される |
|
LWG 2114
( P2167R3 ) |
C++98 | 一部の関数の非 bool 戻り値型が許可されていた | 許可されなくなった |
| LWG 2182 | C++98 |
reference
と
const_reference
で示される型の仕様が不十分だった
|
文言を改善 |
| LWG 2257 | C++98 |
2つのコンテナが異なるサイズの場合でも
等値比較に線形時間が必要とされていた |
この場合、定数時間のみ
が必要とされる |
| LWG 2263 | C++11 | LWG issue 179 の解決がC++11で誤って削除された | 復元された |
| LWG 2839 | C++11 | 標準コンテナの自己ムーブ代入が許可されていなかった |
許可されるが、
結果は未規定 |
| N3346 | C++11 |
C::value_type
が
Destructible
であることが要求されていた
|
C
から
Erasable
であることが
要求される |
関連項目
|
C++ documentation
for
Containers library
|
|
C++ documentation
の
Containers library
|