📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
細 文字列「source lang」を「syntaxhighlight lang」に置換 |
|||
| 18行目: | 18行目: | ||
== vectorを使用する前に == | == vectorを使用する前に == | ||
vectorを使用するためには、以下ののヘッダファイルをインクルードする必要がある。<br> | vectorを使用するためには、以下ののヘッダファイルをインクルードする必要がある。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <vector> | #include <vector> | ||
</source> | </source> | ||
| 28行目: | 28行目: | ||
intやdouble等の基本的な型のみならず、任意で作成したクラスも使用できる。<br> | intやdouble等の基本的な型のみならず、任意で作成したクラスも使用できる。<br> | ||
ここで、Tはデータ型、Nは要素数、dは初期化する値を表すものとする。<br> | ここで、Tはデータ型、Nは要素数、dは初期化する値を表すものとする。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
vector<T> v; | vector<T> v; | ||
vector<T> v(); | vector<T> v(); | ||
| 38行目: | 38行目: | ||
2次元配列のvectorの宣言は以下の通りである。<br> | 2次元配列のvectorの宣言は以下の通りである。<br> | ||
ここで、Mは要素数を表すものとする。<br> | ここで、Mは要素数を表すものとする。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
vector<vector<T>> vv; | vector<vector<T>> vv; | ||
vector<vector<T>> vv(); | vector<vector<T>> vv(); | ||
| 52行目: | 52行目: | ||
===== 1次元配列 ===== | ===== 1次元配列 ===== | ||
v[]のi番目にdを代入して、それを出力する場合は以下となる。<br> | v[]のi番目にdを代入して、それを出力する場合は以下となる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
v[i] = d; | v[i] = d; | ||
cout << v[i] << endl; | cout << v[i] << endl; | ||
| 59行目: | 59行目: | ||
===== 2次元配列 ===== | ===== 2次元配列 ===== | ||
v[][]のi番目およびj番目にdを代入して、それを出力する場合は以下となる。<br> | v[][]のi番目およびj番目にdを代入して、それを出力する場合は以下となる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
v[i][j] = d; | v[i][j] = d; | ||
cout << v[i][j] << endl; | cout << v[i][j] << endl; | ||
| 70行目: | 70行目: | ||
===== 1次元配列 ===== | ===== 1次元配列 ===== | ||
v[]の要素数をN個に変更する場合は以下の通りである。<br> | v[]の要素数をN個に変更する場合は以下の通りである。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
v.resize(N); | v.resize(N); | ||
</source> | </source> | ||
| 76行目: | 76行目: | ||
===== 2次元配列 ===== | ===== 2次元配列 ===== | ||
vv[][]の要素数をN * Nに変更する場合は以下の通りである。<br> | vv[][]の要素数をN * Nに変更する場合は以下の通りである。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 方法 1 | // 方法 1 | ||
vv.resize(N); | vv.resize(N); | ||
| 92行目: | 92行目: | ||
===== 1次元配列 ===== | ===== 1次元配列 ===== | ||
v[]の末尾にデータを追加する場合は以下の通りである。<br> | v[]の末尾にデータを追加する場合は以下の通りである。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
v.push_back(d); | v.push_back(d); | ||
</source> | </source> | ||
| 98行目: | 98行目: | ||
===== 2次元配列 ===== | ===== 2次元配列 ===== | ||
vv[][]のi番目の末尾にデータを追加する場合は以下の通りである。<br> | vv[][]のi番目の末尾にデータを追加する場合は以下の通りである。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
vv[i].push_back(d); | vv[i].push_back(d); | ||
</source> | </source> | ||
| 106行目: | 106行目: | ||
vectorをコピーする方法は複数存在する。<br> | vectorをコピーする方法は複数存在する。<br> | ||
ここでは、v1[]をv2[]にコピーする方法を記述する。<br> | ここでは、v1[]をv2[]にコピーする方法を記述する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 方法 1 | // 方法 1 | ||
v2 = v1 | v2 = v1 | ||
| 124行目: | 124行目: | ||
== vectorの全要素を末尾に追加 == | == vectorの全要素を末尾に追加 == | ||
v1[]をv2[]の末尾に追加する方法は以下の通りである。(方法3が最も簡潔)<br> | v1[]をv2[]の末尾に追加する方法は以下の通りである。(方法3が最も簡潔)<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 方法 1 | // 方法 1 | ||
int size = v2.size(); | int size = v2.size(); | ||
| 146行目: | 146行目: | ||
== 指定範囲をコピー == | == 指定範囲をコピー == | ||
v1[]のa番目からb番目をv2[]にコピーする方法は以下の通りである。(方法2が簡潔)<br> | v1[]のa番目からb番目をv2[]にコピーする方法は以下の通りである。(方法2が簡潔)<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 方法 1 | // 方法 1 | ||
v2.resize(b - a); | v2.resize(b - a); | ||
| 164行目: | 164行目: | ||
ここでは、総和を求めるプログラムとvectorの全要素を表示するプログラムを例として挙げる。<br> | ここでは、総和を求めるプログラムとvectorの全要素を表示するプログラムを例として挙げる。<br> | ||
ただし、処理時間などの理由から参照渡しを使用して、vectorの内容を変更しない場合はconstを付加する。<br> | ただし、処理時間などの理由から参照渡しを使用して、vectorの内容を変更しない場合はconstを付加する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 配列の総和を求めるプログラム | // 配列の総和を求めるプログラム | ||
T SumVector(const vector<T> &v) | T SumVector(const vector<T> &v) | ||
| 208行目: | 208行目: | ||
しかし、戻り値にするとvectorをコピーするために時間が掛かるので、引数として参照渡しする方がよい<br> | しかし、戻り値にするとvectorをコピーするために時間が掛かるので、引数として参照渡しする方がよい<br> | ||
以下のサンプルコードでは、ventorの全要素をscale倍している。<br> | 以下のサンプルコードでは、ventorの全要素をscale倍している。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
vector<int> ScalarVen(const vector<int> &v, int scale) | vector<int> ScalarVen(const vector<int> &v, int scale) | ||
{ | { | ||
| 224行目: | 224行目: | ||
== ソート == | == ソート == | ||
vectorでは、sort関数を使用することで昇順ソートおよび降順ソートを行うことができる。<br> | vectorでは、sort関数を使用することで昇順ソートおよび降順ソートを行うことができる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 昇順ソート | // 昇順ソート | ||
sort(v.begin(), v.end()); | sort(v.begin(), v.end()); | ||
| 235行目: | 235行目: | ||
== 指定要素の削除 == | == 指定要素の削除 == | ||
vectorでは、erase関数を使用することで任意の要素を削除することができる。<br> | vectorでは、erase関数を使用することで任意の要素を削除することができる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 先頭の要素を削除する | // 先頭の要素を削除する | ||
v.erase(v.begin()); | v.erase(v.begin()); | ||
| 250行目: | 250行目: | ||
コマンドライン引数(int argcとchar *argv[])を取得する。<br> | コマンドライン引数(int argcとchar *argv[])を取得する。<br> | ||
vector<string>を使用すると良い。<br> | vector<string>を使用すると良い。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
#include <vector> | #include <vector> | ||
#include <string> | #include <string> | ||
| 373行目: | 373行目: | ||
vectorに対するループ文は、インデックスを使用するよりもRange Based Loopを使用した方が良い。<br> | vectorに対するループ文は、インデックスを使用するよりもRange Based Loopを使用した方が良い。<br> | ||
以下のサンプルコードに、Range Based Loopを使用したループ文を記述する。<br> | 以下のサンプルコードに、Range Based Loopを使用したループ文を記述する。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// 1次元vectorの場合 | // 1次元vectorの場合 | ||
void view(const vector<T> &v) | void view(const vector<T> &v) | ||
| 410行目: | 410行目: | ||
そこで使用されるのがSwap技法と呼ばれる手法である。<br> | そこで使用されるのがSwap技法と呼ばれる手法である。<br> | ||
これは、vectorのswap()関数を使用して一時オブジェクトと交換することで、vectorのデストラクタを強制的に実行させる。<br> | これは、vectorのswap()関数を使用して一時オブジェクトと交換することで、vectorのデストラクタを強制的に実行させる。<br> | ||
< | <syntaxhighlight lang="c++"> | ||
// クラス内に要素数100のvectorを宣言 | // クラス内に要素数100のvectorを宣言 | ||
std::vector<int> m_vec(100); | std::vector<int> m_vec(100); | ||