std::basic_string
-----
#contents
-----
*basic_string [#a845ecaf]
文字列クラス.正式にはSTLではないが,STLと互換性を持つ.
テンプレート仕様は,
template<class charT, class traits = char_traits<charT>, class Allocator = allocator<charT> > class basic_string
文字の型,文字の特徴を記述するクラス,アロケータを指定できる.
basic_stringはvectorの文字列版のようなものであるが,コンテナの終端を表すNULL文字が定義できる,
コンテナの大小関係が規定できる,などの違いがある.
C++で良く用いられるのは,
typedef basic_string<char, char_traits<char>, allocator<char> > string;
typedef basic_string<wchar_t, char_traits<wchar_t>, allocator<wchar_t> > wstring;
の二つである.それぞれ,stringは8ビットANSI文字列,wstringは16ビットUNICODE文字列を扱う.
以下では主にstringについて説明する.
参照 http://www.cplusplus.com/reference/string/string/
***インクルード [#vf06785e]
#include <string>
***初期化(コンストラクタ) [#j10ddc4a]
string(); // 空のstring
string(const string& str); // strで初期化
string(const string& str, size_t pos, size_t n = npos); // strのsubstringで初期化
string(const char * s, size_t n); // 文字配列で初期化.コピーする大きさをnで指定
string(const char * s); // null-teminatedの文字配列で初期化
string(size_t n, char c); // n個のcの羅列で初期化
template<class InputIterator> string (InputIterator begin, InputIterator end); // イテレータによる初期化
***要素アクセス([],at,begin,end,rbegin,rend) [#q56b68e4]
-[] : 通常の配列と同じオペレータ[]を用いたアクセス
const char& operator[](size_t pos) const;
char& operator[](size_t pos);
-at() : 範囲外アクセス時にout_of_range例外を投げる関数
const char& at(size_t pos) const;
char& at(size_t pos);
-begin(),end() : コンテナの最初のイテレータ,最後の次のイテレータを返す.イテレータを用いた要素アクセスに使用
iterator begin ();
const_iterator begin () const;
iterator end();
const_iterator end() const;
-rbegin(),rend() : コンテナの最初の逆イテレータ,最後の次の逆イテレータを返す.イテレータを用いた要素逆順アクセスに使用
reverse_iterator rend();
const_reverse_iterator rend() const;
reverse_iterator rend();
const_reverse_iterator rend() const;
***領域確保(resize,reserve) [#ebbd6e05]
-resize(n) : コンテナのサイズをnに変更する関数.cを指定すると全ての要素がcとなる.単にnだけ指定した場合,各要素はchar()で初期化される.
void resize(size_t n, char c);
void resize(size_t n);
-reserve(n) : コンテナの予約領域を確保する関数.実際に使える(アクセスできる)領域ではないが,ある程度確保したいサイズが決まっているならばpush_backする前にreserveで確保しておくと高速に処理できる.
void reserve(size_t n=0);
***サイズ確認(size,capacity,max_size,empty) [#m085b256]
-size() : コンテナのサイズを返す関数
size_t size() const;
-length() : コンテナのサイズを返す関数(size()と同じ)
size_t length() const;
-capacity() : コンテナの予約領域を返す関数.reserveで確保した領域サイズ.
size_t capacity() const;
-max_size() : コンテナが確保可能な最大サイズを返す関数.予約領域ではない.
size_t max_size() const;
-empty() : コンテナが空だったらtrueを返す関数.size == 0かどうかを確かめることと同義であるが,size()へのアクセスよりも高速.
bool empty () const;
***編集(+=,append,push_back,assign,insert,erase,swap,replace,copy) [#zd1f3348]
-operator+= : コンテナの最後に要素を追加
string& operator+=(const string& str);
string& operator+=(const char* s);
string& operator+=(char c);
-append : コンテナの最後に要素を追加
string& append(const string& str);
string& append(const string& str, size_t pos, size_t n);
string& append(const char* s, size_t n);
string& append(const char* s);
string& append(size_t n, char c);
template <class InputIterator> string& append(InputIterator first, InputIterator last);
-push_back(val) : コンテナの最後に要素を追加
void push_back(char c);
-assign(n, val) : 新しい文字列を割り当てる
string& assign(const string& str);
string& assign(const string& str, size_t pos, size_t n);
string& assign(const char* s, size_t n);
string& assign(const char* s);
string& assign(size_t n, char c);
template <class InputIterator> string& assign(InputIterator first, InputIterator last);
-insert() : 示された位置に要素を挿入する.
string& insert(size_t pos1, const string& str);
string& insert(size_t pos1, const string& str, size_t pos2, size_t n);
string& insert(size_t pos1, const char* s, size_t n);
string& insert(size_t pos1, const char* s);
string& insert(size_t pos1, size_t n, char c);
iterator insert(iterator p, char c);
void insert(iterator p, size_t n, char c);
template<class InputIterator> void insert(iterator p, InputIterator first, InputIterator last);
-erase(iter) : 示された位置の要素を削除する.
string& erase(size_t pos = 0, size_t n = npos);
iterator erase(iterator position);
iterator erase(iterator first, iterator last);
-swap : 2つのコンテナのスワップ.
void swap(string& str);
-replace : コンテナ要素の置き換え
string& replace(size_t pos1, size_t n1, const string& str);
string& replace(iterator i1, iterator i2, const string& str);
string& replace(size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2);
string& replace(size_t pos1, size_t n1, const char* s, size_t n2);
string& replace(iterator i1, iterator i2, const char* s, size_t n2);
string& replace(size_t pos1, size_t n1, const char* s);
string& replace(iterator i1, iterator i2, const char* s);
string& replace(size_t pos1, size_t n1, size_t n2, char c);
string& replace(iterator i1, iterator i2, size_t n2, char c);
template<class InputIterator> string& replace(iterator i1, iterator i2, InputIterator j1, InputIterator j2);
-copy
size_t copy(char* s, size_t n, size_t pos = 0) const;
呼び出し元のstringのposからn文字分をsで示される文字列にコピーする.コピーされた文字列はnull-terminatedではないので注意.
-get_allocator
allocator<char> get_allocator() const;
アロケータを返す.
***C文字列との互換性(c_str,data) [#bc3be44b]
-c_str
const char* c_str() const;
C文字列型(null-terminated)を生成して返す.
-data
const char* data() const;
文字列の最初の文字を示すポインタを返す.
***検索(find,find_first_of,find_first_not_of,rfind,find_last_of,find_last_not_of) [#weeada4f]
-find, find_first_of, find_first_not_of
size_t find(const string& str, size_t pos = 0) const;
size_t find(const char* s, size_t pos, size_t n) const;
size_t find(const char* s, size_t pos = 0) const;
size_t find(char c, size_t pos = 0) const;
string変数内の文字列str,s,文字cを検索し,その最初の位置を返す.
見つからなければ,string::nposを返す.
posは検索開始位置(posの位置も検索に含む),nは検索文字数.
size_t find_first_of(const string& str, size_t pos = 0) const;
size_t find_first_of(const char* s, size_t pos, size_t n) const;
size_t find_first_of(const char* s, size_t pos = 0) const;
size_t find_first_of(char c, size_t pos = 0) const;
パラメータはfindと同じだが,find_first_ofは文字列str,s,文字c内の任意の文字列に
一致するものを検索する.
size_t find_first_not_of(const string& str, size_t pos = 0) const;
size_t find_first_not_of(const char* s, size_t pos, size_t n) const;
size_t find_first_not_of(const char* s, size_t pos = 0) const;
size_t find_first_not_of(char c, size_t pos = 0) const;
文字列str,sもしくは文字c内の任意の文字列に一致しない最初の位置を返す.
-rfind, find_last_of, find_last_not_of
size_t rfind(const string& str, size_t pos = npos) const;
size_t rfind(const char* s, size_t pos, size_t n) const;
size_t rfind(const char* s, size_t pos = npos) const;
size_t rfind(char c, size_t pos = npos) const;
string変数内の文字列str,s,文字cを検索し,その最後の位置を返す.
見つからなければ,string::nposを返す.
posは検索終了位置(posの位置も検索に含む),nは検索文字数.
size_t find_last_of(const string& str, size_t pos = npos) const;
size_t find_last_of(const char* s, size_t pos, size_t n) const;
size_t find_last_of(const char* s, size_t pos = npos) const;
size_t find_last_of(char c, size_t pos = npos) const;
パラメータはrfindと同じだが,find_last_ofは文字列str,s,文字c内の任意の文字列に
一致するものを検索する.
size_t find_last_not_of(const string& str, size_t pos = npos) const;
size_t find_last_not_of(const char* s, size_t pos, size_t n) const;
size_t find_last_not_of(const char* s, size_t pos = npos) const;
size_t find_last_not_of(char c, size_t pos = npos) const;
文字列str,sもしくは文字c内の任意の文字列に一致しない最後の位置を返す.
***部分文字列(substr) [#m24f382b]
-substr
string substr(size_t pos = 0, size_t n = npos) const;
posからn文字分の部分文字列を返す.posから最後までの文字列の場合はnにnposを渡す.
***比較(compare) [#m119657b]
-compare
int compare(const string& str) const;
int compare(const char* s) const;
int compare(size_t pos1, size_t n1, const string& str) const;
int compare(size_t pos1, size_t n1, const char* s) const;
int compare(size_t pos1, size_t n1, const string& str, size_t pos2, size_t n2) const;
int compare(size_t pos1, size_t n1, const char* s, size_t n2) const;
他の文字列との比較.比較する文字列が全て一致していれば0,
一致しない最初の文字を比較して,辞書順で元の文字列<比較文字列なら-1,その逆なら1を返す.~
使用例
#code(C){{
int main(void)
{
string s0 = "abcdefg";
string s1 = "abcdffg";
cout << s0 << " - " << s1 << " : " << s0.compare(s1) << endl;
s1 = "abcdeeg";
cout << s0 << " - " << s1 << " : " << s0.compare(s1) << endl;
return 0;
}
}}
結果は,
abcdefg - abcdffg : -1
abcdefg - abcdeeg : 1