vectorの使い方
vectorは一連の値を保存する動的配列です。配列のサイズは自動で確保されるのでメモリの心配はあまりする必要がありません。
vectorの宣言
std::vector<格納したい変数の型名> 変数名; vector<格納したい変数の型名> 変数名; // using namespace std; を書いているとき
コンストラクタ
// T は格納したい型名
vector<T> v();
vector<T> v( size_type size ); // サイズ size のvectorを宣言
vector<T> v( size_type size , const T& val ); // サイズ size のvectorを宣言し, すべての要素を val で初期化する.
// (例)
vector<int> v; // vectorのvを宣言 (サイズは0)
vector<int> v(5); // 配列のサイズ5のvectorを宣言
vector<int> v(5, -1) // 配列のサイズ5のvectorを宣言し、各要素を-1で初期化する。 {-1, -1, -1, -1, -1}
使い方の一例
push_back(val) で 値 val を配列の末尾に追加できます。
pop_back() で配列の末尾の要素を削除できます。
普通の配列と同じように添字を指定して特定の要素を参照したり、特定の要素に代入したりできます。
pop_back() で配列の末尾の要素を削除できます。
普通の配列と同じように添字を指定して特定の要素を参照したり、特定の要素に代入したりできます。
// (例)
v.push_back(5); // {} => {5}
v.push_back(3); // {5} => {5, 3}
v.push_back(1); // {5, 3} => {5, 3, 1}
v.pop_back(); // {5, 3, 1} => {5, 3}
v[1] = 2; // {5, 3} => {5, 2}
よく使うメンバ関数
// vector<T> v, w;とします. // v と w が等しいときは true , そうでないときは false を返す. (戻り値:bool) v == w; // v と w を辞書順で比較して v の方が小さければ true , そうでないときは false を返す. (戻り値:bool) v < w; // 要素数を返す. (戻り値:size_type) v.size(); // 要素をすべて削除する. (戻り値:void) v.clear(); // 要素数が 0 のときは true を, そうでないときは false を返す. (戻り値:bool) v.empty(); // 値 val を v の末尾に追加する. (戻り値:void) v.push_back( const T& val ); // 末尾の要素を削除する. (戻り値:void) v.pop_back(); // pos の直前の位置に val を挿入して, その要素を指すイテレータを返す. (戻り値:iterator) v.insert( iterator pos , const T& val ); // start から end までの要素を pos の直前に挿入する. (戻り値:void) v.insert( iterator pos, input_iterator start, input_iterator end ); // posの位置の要素を削除し, 削除された最終要素の直後を指すイテレータを返す. (戻り値:iterator) v.erase( iterator pos ); // v の先頭を指すイテレータを返す. (戻り値:iterator) v.begin(); // v の末尾を指すイテレータを返す. (戻り値:iterator) v.end();
その他
// vector の連結
// v = {1, 2, 3}, w = {4, 5, 6}
v.insert( v.end() , w.begin() , w.end() ); // v = {1, 2, 3, 4, 5, 6}
// vector の全要素の走査
for(int i = 0 ; i < v.size() ; i++ ){
v[i];
}
// vector の全要素の走査 (イテレータを使う)
for(vector<T>::iterator it = v.begin() ; it != v.end() ; ++it ){
*it;
}
// k 番目に値 val を追加
v.insert( v.begin() + k , T val );
// k 番目の要素を削除
v.erase( v.begin() + k );
...
