📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
編集の要約なし |
編集の要約なし |
||
| 160行目: | 160行目: | ||
== vectorを関数の引数にする == | == vectorを関数の引数にする == | ||
vectorは、関数の引数にすることができる。<br> | |||
また、vectorのメンバ関数から要素数を参照することができるため、関数内で簡単にループ数を指定できる。<br> | また、vectorのメンバ関数から要素数を参照することができるため、関数内で簡単にループ数を指定できる。<br> | ||
ここでは、総和を求めるプログラムとvectorの全要素を表示するプログラムを例として挙げる。<br> | ここでは、総和を求めるプログラムとvectorの全要素を表示するプログラムを例として挙げる。<br> | ||
ただし、処理時間などの理由から参照渡しを使用して、vectorの内容を変更しない場合はconstを付加する。<br> | ただし、処理時間などの理由から参照渡しを使用して、vectorの内容を変更しない場合はconstを付加する。<br> | ||
<source lang="c++"> | <source lang="c++"> | ||
// 配列の総和を求めるプログラム | |||
T SumVector(const vector<T> &v) | T SumVector(const vector<T> &v) | ||
{ | { | ||
| 178行目: | 177行目: | ||
return sum; | return sum; | ||
} | } | ||
// vectorの全要素を表示するプログラム | |||
// 一次元vectorの場合 | |||
// | |||
void view(const vector<T> &v) | void view(const vector<T> &v) | ||
{ | { | ||
| 192行目: | 189行目: | ||
} | } | ||
// | // 二次元vectorの場合 | ||
void view(const vector<vector<T>> &vv) | void view(const vector<vector<T>> &vv) | ||
{ | { | ||
| 201行目: | 198行目: | ||
cout << vv[i][j] << " "; | cout << vv[i][j] << " "; | ||
} | } | ||
cout << endl; | |||
} | |||
} | |||
</source> | |||
<br><br> | |||
== 関数の戻り値にする == | |||
vectorは、戻り値にも使用できる。<br> | |||
しかし、戻り値にするとvectorをコピーするために時間が掛かるので、引数として参照渡しする方がよい<br> | |||
以下のサンプルコードでは、ventorの全要素をscale倍している。<br> | |||
<source lang="c++"> | |||
vector<int> ScalarVen(const vector<int> &v, int scale) | |||
{ | |||
vector<int> mul(v.size()); | |||
for(int i = 0; i < mul.size(); i++) | |||
{ | |||
mul[i] = v[i] * scale; | |||
} | |||
return mul; | |||
} | |||
</source> | |||
<br><br> | |||
== ソート == | |||
vectorでは、sort関数を使用することで昇順ソートおよび降順ソートを行うことができる。<br> | |||
<source lang="c++"> | |||
// 昇順ソート | |||
sort(v.begin(), v.end()); | |||
// 降順ソート | |||
sort(v.begin(), v.end(), greater<int>()); | |||
</source> | |||
<br><br> | |||
== 指定要素の削除 == | |||
vectorでは、erase関数を使用することで任意の要素を削除することができる。<br> | |||
<source lang="c++"> | |||
// 先頭の要素を削除する | |||
v.erase(v.begin()); | |||
// 末尾を削除する | |||
v.erase(v.end()); | |||
// 先頭からi番目の要素を削除する | |||
v.erase(v.begin() + i); | |||
</source> | |||
<br><br> | |||
== コマンドライン引数(argv)をvectorに格納する == | |||
コマンドライン引数(int argcとchar *argv[])を取得する。<br> | |||
vector<string>を使用すると良い。<br> | |||
<source lang="c++"> | |||
#include <vector> | |||
#include <string> | |||
int main(int argc, char *argv[]) | |||
{ | |||
vector<string> args(argv, argv + argc); | |||
return 0; | |||
} | |||
</source> | |||
<br><br> | |||
== Range-Based-for-loopの例 | |||
vectorに対するループ文は、インデックスを使用するよりもRange Based Loopを使用した方が良い。<br> | |||
以下のサンプルコードに、Range Based Loopを使用したループ文を記述する。<br> | |||
<source lang="c++"> | |||
// 1次元vectorの場合 | |||
void view(const vector<T> &v) | |||
{ | |||
for(const auto &element : v) | |||
{ | |||
cout << e << " "; | |||
} | |||
cout << endl; | |||
} | |||
// 2次元vectorの場合 | |||
void view(const vector<vector<T>> &vv) | |||
{ | |||
for(const auto &v : vv) | |||
{ | |||
for(const auto &element : v) | |||
{ | |||
cout << element << " "; | |||
} | |||
cout << endl; | cout << endl; | ||
} | } | ||