C++ 前置インクリメントと後置インクリメント

インクリメント、デクリメントとは? インクリメント(++演算子)は、val+=1 と等価。 デクリメント(--演算子)は、val-=1 と等価。 いずれも前置と後置が可能。 前置と後置の違い 見た目は似ているが、使い方を誤ると、 発見しにくいバグを生み出してしま…

C++ これぞ参照の真骨頂!vector の要素を編集する

これは面白い!と思ったので記事にしてみる。 参照を使えばスマートに vector の要素を編集できる。 #include <iostream> #include <vector> using namespace std; void TestFunc(vector<int>& v) { for (int& x : v) ++x; } void PrintFunc(vector<int>& v) { cout << "PrintFunc Start" </int></int></vector></iostream>…

Mac + VSCode + code-runner + g++ で C++11、C++14、C++17を実行する

Mac + VSCode + code-runner + g++ で C++11、C++14、C++17を実行する 実行環境をすぐに忘れてしまうので備忘録。 Mac にインストールしたパッケージ Homebrew g++ VSCode にインストールした Extension C/C++ - Visual Studio Marketplace C/C++ Clang Comm…

C++ コピーコンストラクタと代入演算子のオーバーロードを徹底攻略

それぞれの処理が呼び出されるタイミングについて徹底調査 ログを仕込んだテストプログラムにて、 コピーコンストラクタ、代入演算子のオーバーロードが どのようなタイミングで呼び出されるか徹底的に確認。ついでに、コンストラクタ、デストラクタにもログ…

C++ 動的に連結リストを作成する

連結リストとは? 最も基本的なデータ構造の1つであり、他のデータ構造の実装に使われる。リンクリスト、リンクトリストとも表記される。 一連のノードが、任意のデータフィールド群を持ち、1つか2つの参照(リンク)により次(および前)のノードを指してい…

C++ ポインタと const 修飾子について

非constなポインタ変数 char buf[] = "Hello"; char overWriteBuf[] = "overwrite"; char *p_buf = buf; // ポインタが指す値を変更可能 strcpy(p_buf, "overwrite"); // ポインタを変更可能 p_buf = overWriteBuf; 「ポインタが指すデータがconst」なポイン…