📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)

文字列「source lang」を「syntaxhighlight lang」に置換
18行目: 18行目:
== vectorを使用する前に ==
== vectorを使用する前に ==
vectorを使用するためには、以下ののヘッダファイルをインクルードする必要がある。<br>
vectorを使用するためには、以下ののヘッダファイルをインクルードする必要がある。<br>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  v.resize(N);
  v.resize(N);
  </source>
  </source>
76行目: 76行目:
===== 2次元配列 =====
===== 2次元配列 =====
vv[][]の要素数をN * Nに変更する場合は以下の通りである。<br>
vv[][]の要素数をN * Nに変更する場合は以下の通りである。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // 方法 1
  // 方法 1
  vv.resize(N);
  vv.resize(N);
92行目: 92行目:
===== 1次元配列 =====
===== 1次元配列 =====
v[]の末尾にデータを追加する場合は以下の通りである。<br>
v[]の末尾にデータを追加する場合は以下の通りである。<br>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  v.push_back(d);
  v.push_back(d);
  </source>
  </source>
98行目: 98行目:
===== 2次元配列 =====
===== 2次元配列 =====
vv[][]のi番目の末尾にデータを追加する場合は以下の通りである。<br>
vv[][]のi番目の末尾にデータを追加する場合は以下の通りである。<br>
  <source lang="c++">
  <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>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // 方法 1
  // 方法 1
  v2 = v1
  v2 = v1
124行目: 124行目:
== vectorの全要素を末尾に追加 ==
== vectorの全要素を末尾に追加 ==
v1[]をv2[]の末尾に追加する方法は以下の通りである。(方法3が最も簡潔)<br>
v1[]をv2[]の末尾に追加する方法は以下の通りである。(方法3が最も簡潔)<br>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // 昇順ソート
  // 昇順ソート
  sort(v.begin(), v.end());
  sort(v.begin(), v.end());
235行目: 235行目:
== 指定要素の削除 ==
== 指定要素の削除 ==
vectorでは、erase関数を使用することで任意の要素を削除することができる。<br>
vectorでは、erase関数を使用することで任意の要素を削除することができる。<br>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <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>
  <source lang="c++">
  <syntaxhighlight lang="c++">
  // クラス内に要素数100のvectorを宣言
  // クラス内に要素数100のvectorを宣言
  std::vector<int> m_vec(100);
  std::vector<int> m_vec(100);