GUZAI3ノートブック

友人であるGUZAI3様の依頼で備忘録を書いています。

C++

vectorから重複要素を削除する

これを解いているときに「vectorから重複を削除する方法忘れちゃった~」となったので復習した。 atcoder.jp 方法1 : sort -> unique + erase 重複要素を線形探索するために sort しておく。 unique で隣接する重複要素を除いた要素を先頭に集める。 unique …

C/C++で符号付き整数を-1で除算すると未定義動作になることがある

C C++

ゼロ除算には気をつけているが、そうでない除算も未定義動作になるケースがあることに気付かされた。例えば16ビット符号付き整数型の最小値 -32768 を -1 で除算すると、オーバーフローしてしまう。 普通に算数をすると 32768 になるのだが、最大値は 32767 …

C++のLambda式で多重for文を抜ける

序 多重for文 を抜ける方法はいくつかあって、例えば各ループごとにbreak判定したり、goto文で飛ぶ。最近は Lambda式 でうまく抜ける方法を知ったので、AtCoderの過去問を解く際に使ってみた。 過去問 atcoder.jp 提出コード #include <iostream> #include <vector> int main()</vector></iostream>…

VSCodeの補完をC++14からC++17に変更する

C++17だと lcm (最大公約数) などのライブラリが使えるようになったが、C++14の環境だと構文エラーになる。 AtCoderのジャッジ更新があり、手元の環境をC++14からC++17に移行した。 移行といっても、グザイが必要なのはコード補完とコンパイルをC++17に対応…

配列をstd::sortに食わせるときは「先頭を指すイテレータ」と「末尾の次を指すイテレータ」を渡す

C++

ソートしたい配列の「先頭」と「末尾」ではなく、「先頭」と「末尾の次」を渡す。以下の配列でソートを試してみる。 位置 0 1 2 3 4 要素 5 43 7 89 1 ■「末尾のイテレータ」を渡す例 #include <algorithm> #include <iostream> int main() { int num[5] = {5, 43, 7, 89, 1}; std</iostream></algorithm>…