📢 Webサイト閉鎖と移転のお知らせ
このWebサイトは2026年9月に閉鎖いたします。
新しい記事は移転先で追加しております。(旧サイトでは記事を追加しておりません)
| (同じ利用者による、間の2版が非表示) | |||
| 100行目: | 100行目: | ||
<syntaxhighlight lang="c++"> | <syntaxhighlight lang="c++"> | ||
vv[i].push_back(d); | vv[i].push_back(d); | ||
</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> | </syntaxhighlight> | ||
<br><br> | <br><br> | ||
| 401行目: | 461行目: | ||
<br><br> | <br><br> | ||
== vectorの解放(Swap技法) == | == 要素の検索 == | ||
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> | |||
== 全要素の入れ替え == | |||
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> | ||
| 418行目: | 501行目: | ||
</syntaxhighlight> | </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++]] | ||