使い方は
vector<データ型> vec;というように、オブジェクトを生成しておいて、これにデータを追加していきます。
たとえば
vector<int> v;
とすれば、このオブジェクトにはint型データをどんどん詰め込むことができます。 詰め込むには、push_backメンバ関数を使いいます。
vector<int> v; v.push_back(500); v_push_back(400);などのように使います。詰め込んだデータにアクセスするには
v[n]とします。最初のデータはv[0], 次のデータはv[1],...というようになります。
オブジェクトに格納されているデータの個数はsizeメンバ関数でわかります。 ここで、注意しなくてはいけないのはsizeメンバ関数の戻り値はvector<型名>::size_type型なので
int i; if (i < v.size()) { ... }などというように使うと警告がでます。この場合v.size()をint型にキャストしてしまえばワーニングが出なくなります。
では、簡単なプログラムを作ってみましょう。適当な数値を入力していき平均値を出すというものです。入力が終了したら、「数値を入力--」のところで何も入力せずにリターンキーを押します。また、数値入力時に数値以外のものを入力すると0.0と見なされます。 また、入力時にスペースを入れると、スペース以降は無視されます。「0.5 32 158」と入力すると0.5とみなされます。
2番目の入力時にスペースを入れて2つの数値を入力していますが、スペース以降は 無視されています。
3番目の入力時に数値以外を入力しているので0.0として扱われました。
数値を入れ終わったら、何も入力せずにリターン・キーを押します。
プログラムのソースは次のようになっています。
// vector01.cpp #include <iostream> #include <vector> using namespace std; int main() { vector<double> v; char str[32]; double x, sum = 0; int i; while (1) { cout << "数値を入力-- "; gets(str); if (strcmp(str, "") == 0) break; x = atof(str); v.push_back(x); sum += x; } cout << "data------" << endl; for (i = 0; i < (int)v.size(); i++) { cout << "[" << i << "] " << v[i] << endl; } if ((int)v.size() == 0) { cout << "データはありません" << endl; } else { cout << "平均値= " << sum / (double)v.size() << endl; } return 0; }数値データを入力せずにいきなり、リターン・キーを押したときにも対応できるようにしてあります。
次に、もう少し違う例を見てみましょう。
2種類のデータ(氏名と住所)を別々のオブジェクトに格納しています。 どちらも同じデータ型なので一つのオブジェクトに格納してもよいのですが あえて2つに分けてみました。
このようにすると、一つのデータの入力の失敗があると、以降氏名と住所が 全部ずれてしまい大変まずいことになります。そこで、住所入力の時に 何も入力しなくても、それをデータとするようにしています。
また、データ型にはstringクラスを使っています。
// vector02.cpp #include <iostream> #include <vector> #include <string> using namespace std; int main() { vector<string> name, address; string s; int i; cout << "氏名入力でリターン・キーで終了" << endl; while (1) { cout << "氏名== "; getline(cin, s); if (s == "") break; name.push_back(s); cout << "住所== "; getline(cin, s); address.push_back(s); } cout << endl; cout << "簡易住所録" << endl; for (i = 0; i < (int)name.size(); i++) { cout << name[i] << "--- " << address[i] << endl; } return 0; }これを、ファイルに保存できるように改良してみてください。また、データの修正も できるように改良してみてください。
Update Jul/08/2002 By Y.Kumei