## 12.1 string 抽象化

文字列 は、本来インデックス付けが可能な文字シーケンスです。実際には、string は vector のサブクラスとして宣言されていませんが、第 5 章で説明したほとんどの vector 演算子を string 値に適用することができます。さらに文字列は、sequence コンテナタイプとしても適格です。 ただし string は、極めて抽象的な数量です。単純な vector 演算子のほかに、 string データ型はいくつかの便利で高性能な演算子も提供します。

標準 C++ ライブラリでは、string は、実際には basic_string というテンプレートクラスです。テンプレートの引数は、 string コンテナに保持される文字のタイプを表します。この方法で文字列を定義することによって、標準 C++ ライブラリは、通常の 8 ビット ASCII 文字のシーケンスを操作する機能だけでなく、16 ビットワイド文字などのその他の文字型に似たシーケンスを操作する機能も提供します。データ型 string および wstring (ワイド文字列) は、basic_string の型定義にすぎず、次のように定義されます。

    typedef basic_string<char> string;
    typedef basic_string<wchar_t> wstring;

> 注: この章ではこれ以降、文字列データ型について説明しますが、紹介する演算はすべてワイド文字列にも適用されます。

すでに説明したように、string は、さまざまな点で文字の vector と類似しています。vector データ型と同様に、 string は 2 つのサイズに関連します。第 1 のサイズは、現在文字列に格納されている文字数を表します。第 2 のサイズは容量で、新規に内部バッファーを再割り当てせずに潜在的に string に格納可能な最大文字数を表します。

vector データ型の場合と同様に、string の容量は動的な数量です。string 演算によって、string 値に格納される文字数が string の容量を超えた場合、新規に内部バッファーが割り当てられ、 string 値で初期化されて、string の容量が増大します。これらの操作はすべてバックグラウンドで行われ、プログラマとの対話を必要としません。

### 12.1.1 インクルードファイル

string を使用するプログラムには、次のように `string` ヘッダーファイルをインクルードする必要があります。

    # include <string>

Copyright (c) 1998, Rogue Wave Software, Inc.
このマニュアルに関する誤りのご指摘やご質問は、電子メールにてお送りください。
OEM リリース, 1998 年 6 月