【C++】vectorは超使える娘だった件【STL】
今回は、C++でも超重要といわれるSTL(※1)について勉強していきましょう。C++といえば、OOP(※2)と並ぶくらいの肝となるのが、このSTLです。小難しく思うのは、はじめだけ是非実際にプログラムを書いて体得してみてください。
C言語からやってきた人は、楽すぎて泣けてくると思いますよ。
※1.Standard Template Library (STL) は、プログラミング言語C++の規格で定義された標準ライブラリの一つ。ヒューレット・パッカード社在籍の研究者(当時)であったアレクサンドル・ステパノフ等によって考案され、後にANSI/ISO標準に組み込まれた。 1
※2.オブジェクト指向プログラミング(オブジェクトしこうプログラミング|英: object-oriented programming/OOP)は、オブジェクト指向の考え方[1]を取り入れたコンピュータ・プログラミング技術である。ソフトウェアの大規模化に伴い、より効率的な開発手法が模索される中で、1960年代にその概形が発案された。 2
※2.オブジェクト指向プログラミング(オブジェクトしこうプログラミング|英: object-oriented programming/OOP)は、オブジェクト指向の考え方[1]を取り入れたコンピュータ・プログラミング技術である。ソフトウェアの大規模化に伴い、より効率的な開発手法が模索される中で、1960年代にその概形が発案された。 2
vector は動的配列(コンテナ)
vectorクラスの優れているところは、必要に応じてメモリを割り当ててくれるため動的に配列の中身を増やすことができます。C言語ならその都度メモリを確保してとやってたかもしれませんが、C++のSTLにかかればそんな制約は、解決です。
いくつか宣言例を書いておきます。
vector iv; // 長さ0のint型ベクタを作成
vector cv(20); // 20個の要素を持つchar型のベクタを作成
vector cv(5, ‘x’); // 5個の要素を持つchar型ベクタを’x’で初期化
vector iv2(iv); // int型のベクタからint型のベクタを作成
vector
vector
vector
実際にサンプルを打ち込んで値をってみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
#include <iostream> #include <vector> using namespace std; int main() { vector<int> v(10); // 長さ10のベクタ int i; // v の元の大きさを表示する cout << "Size = " << v.size() << endl; // ベクタの各要素に値を代入する for (i = 0; i < 10; i++) v[i] = i; // ベクタの要素を表示する cout << "Current Contents:\n"; for (i = 0; i < v.size(); i++) cout << v[i] << " "; cout << "\n\n"; cout << "Expanding vector\n"; // ベクタの最後に値を追加すると、ベクタは必要に応じて拡大する for (i = 0; i < 5; i++) v.push_back(i + 10); // v の現在の大きさを表示する cout << "Size now = " << v.size() << endl; // ベクタの要素を表示する cout << "Current contents:\n"; for (i = 0; i < v.size(); i++) cout << v[i] << " "; cout << "\n\n"; // ベクタの要素を変更する for (i = 0; i < v.size(); i++) v[i] = -v[i]; cout << "Modified Contents:\n"; for (i = 0; i < v.size(); i++)cout << v[i] << " "; cout << endl; return 0; } |
〇まとめ
v.size() :ベクタに格納されている要素の数
v.push_back() :ベクタの末尾に値を追加
v.begin() :ベクタの最初の要素
v.end() :ベクタの最後の要素
v.insert() :ベクタの任意の位置に要素を追加
v.size() :ベクタに格納されている要素の数
v.push_back() :ベクタの末尾に値を追加
v.begin() :ベクタの最初の要素
v.end() :ベクタの最後の要素
v.insert() :ベクタの任意の位置に要素を追加