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

文字列「source lang」を「syntaxhighlight lang」に置換
 
(同じ利用者による、間の5版が非表示)
20行目: 20行目:
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  #include <vector>
  #include <vector>
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


33行目: 33行目:
  vector<T> v(N);
  vector<T> v(N);
  vector<T> v(N, d);
  vector<T> v(N, d);
  </source>
  </syntaxhighlight>
<br>
<br>
===== 2次元配列 =====
===== 2次元配列 =====
44行目: 44行目:
  vector<vector<T>> vv(N, vector<T>(M));
  vector<vector<T>> vv(N, vector<T>(M));
  vector<vector<T>> vv(N, vector<T>(M, d));
  vector<vector<T>> vv(N, vector<T>(M, d));
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


55行目: 55行目:
  v[i] = d;
  v[i] = d;
  cout << v[i] << endl;
  cout << v[i] << endl;
  </source>
  </syntaxhighlight>
<br>
<br>
===== 2次元配列 =====
===== 2次元配列 =====
62行目: 62行目:
  v[i][j] = d;
  v[i][j] = d;
  cout << v[i][j] << endl;
  cout << v[i][j] << endl;
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


72行目: 72行目:
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  v.resize(N);
  v.resize(N);
  </source>
  </syntaxhighlight>
<br>
<br>
===== 2次元配列 =====
===== 2次元配列 =====
86行目: 86行目:
  // 方法 2
  // 方法 2
  vv.resize(N, vector<T>(N));
  vv.resize(N, vector<T>(N));
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


94行目: 94行目:
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  v.push_back(d);
  v.push_back(d);
  </source>
  </syntaxhighlight>
<br>
<br>
===== 2次元配列 =====
===== 2次元配列 =====
100行目: 100行目:
  <syntaxhighlight lang="c++">
  <syntaxhighlight lang="c++">
  vv[i].push_back(d);
  vv[i].push_back(d);
  </source>
  </syntaxhighlight>
<br><br>
 
== サイズの確認 ==
==== 空かどうかを確認 ====
std::vectorクラスが空かどうかを確認する場合、いくつかの方法が存在する。<br>
<br>
* <code>empty</code>メソッドを使用する。(推奨)
*: コードの意図が明確である。
*: 多くの実装では、<u>O(1)</u>の時間複雑度で動作する。
*: 他のSTLコンテナでも同様に使用できる。
<syntaxhighlight lang="c++">
std::vector<int> vec;
if (vec.empty()) {
    std::cout << "Vector is empty" << std::endl;
}
else {
    std::cout << "Vector is not empty" << std::endl;
}
</syntaxhighlight>
<br>
* <code>size</code>メソッドを使用する。
*: ただし、emptyメソッドの方がベクトルが空かどうかを確認する意図をより明確に表現することができる。
<syntaxhighlight lang="c++">
std::vector<int> vec;
if (vec.size() == 0) {
    std::cout << "Vector is empty" << std::endl;
}
else {
    std::cout << "Vector is not empty" << std::endl;
}
</syntaxhighlight>
<br>
* ベクトルの開始と終了イテレータを比較する。
<syntaxhighlight lang="c++">
std::vector<int> vec;
if (vec.begin() == vec.end()) {
    std::cout << "Vector is empty" << std::endl;
}
else {
    std::cout << "Vector is not empty" << std::endl;
}
</syntaxhighlight>
<br>
* <code>std::ranges::empty</code>メソッドを使用する。(C++20以降)
*: この方法は、std::vectorクラスだけでなく、他の範囲 (range) に対しても同様に使用できるため、より汎用的である。
<syntaxhighlight lang="c++">
#include <ranges>
std::vector<int> vec;
if (std::ranges::empty(vec)) {
    std::cout << "Vector is empty" << std::endl;
}
else {
    std::cout << "Vector is not empty" << std::endl;
}
</syntaxhighlight>
<br><br>
<br><br>


119行目: 179行目:
  // 方法 3
  // 方法 3
  copy(v1.begin(), v1.end(), v2.begin());
  copy(v1.begin(), v1.end(), v2.begin());
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


141行目: 201行目:
  // 方法 3
  // 方法 3
  copy(v1.begin(), v1.end(), back_inserter(v2));
  copy(v1.begin(), v1.end(), back_inserter(v2));
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


156行目: 216行目:
  // 方法 2
  // 方法 2
  copy(v1.begin() + a, v1.begin() + b, v2.begin());
  copy(v1.begin() + a, v1.begin() + b, v2.begin());
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


201行目: 261行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


219行目: 279行目:
     return mul;
     return mul;
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


230行目: 290行目:
  // 降順ソート
  // 降順ソート
  sort(v.begin(), v.end(), greater<int>());
  sort(v.begin(), v.end(), greater<int>());
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


244行目: 304行目:
  // 先頭からi番目の要素を削除する
  // 先頭からi番目の要素を削除する
  v.erase(v.begin() + i);
  v.erase(v.begin() + i);
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


260行目: 320行目:
     return 0;
     return 0;
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
<br><br>


398行目: 458行目:
     }
     }
  }
  }
  </source>
  </syntaxhighlight>
<br><br>
 
== 要素の検索 ==
algorithmのfindメソッドを使用して、要素を検索をすることができる。<br>
<syntaxhighlight lang="c++">
#include <algorithm>
vector<string> vec = {"hoge", "piyo", "fuga", "foo", "bar"};
if (find(vec.begin(), vec.end(), "fuga") != vec.end()) std::cout << "検索成功" << std::endl;
else                                                  std::cout << "検索失敗" << std::endl;
</syntaxhighlight>
<br><br>
<br><br>


== vectorの解放(Swap技法) ==
== 全要素の入れ替え ==
swapメソッドを使用して、2つのvecorクラスの全要素を入れ替えることができる。<br>
<syntaxhighlight lang="c++">
vector<int> vec1 = {10, 20, 30, 40, 50};
vector<int> vec2 = {100, 200, 300};
// 全要素の入れ替え
vec1.swap(vec2);  // または、vec1.swap(vec1, vec2);
</syntaxhighlight>
<br><br>
 
== vectorの解放 (Swap技法) ==
関数内にて宣言して使用するvectorは、その関数を抜ければ自動でメモリの解放を行うが、<br>
関数内にて宣言して使用するvectorは、その関数を抜ければ自動でメモリの解放を行うが、<br>
クラスのメンバ変数としてvectorを使用する場合は、クラスのデストラクタが実行されるまでメモリの解放を行わない。<br>
クラスのメンバ変数としてvectorを使用する場合は、クラスのデストラクタが実行されるまでメモリの解放を行わない。<br>
416行目: 499行目:
  // Swap技法によるメモリの解放
  // Swap技法によるメモリの解放
  std::vector<int>().swap(m_vec);
  std::vector<int>().swap(m_vec);
  </source>
  </syntaxhighlight>
<br><br>
<br><br>
{{#seo:
|title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki
|keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,Podman,電気回路,電子回路,基板,プリント基板
|description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux
|image=/resources/assets/MochiuLogo_Single_Blue.png
}}


__FORCETOC__
__FORCETOC__
[[カテゴリ:C++]]
[[カテゴリ:C++]]