プログラミング

C++で標数2の体

本記事では標数2の体をC++で定義する際の要点について概説する.

【記号摂動】幾何計算で退化に対処したい

幾何学計算は、誤差が全くないような整数同士の演算であっても特定の状況で正しく計算ができなくなることで私のような一般学生を困らせる。 二次元の凸包を作るときには三角形の符号付面積が0になる状況、二次元のドロネー図を得るときには三角形の外接円周…

C++で行列のなんやかんやを実装した話

これは最近実装したやつの解説です。主に自分が忘れたときのための備忘録として書いていますから他の人が読むにはあんまり親切ではないかもしれません。 静的なのと動的なの C++のテンプレートはとても強力なので大抵のことはテンプレートで解決できる。行列…

定数回のループを高速化する with fold expression

久しぶりにネタになりそうなことが見つかったのだ!更新してないからか、読む人はめちゃめちゃ少ないのだけれど、ありがたいことに0人ではないので、せっかく見つかったネタを自分だけの知見とせずにアウトプットしたいと思う。 またC++の話だけれど、ライブ…

C++のrange-based forで複数のコンテナをイテレーションする

C++は健康に良い。C++11で導入されたrange-based forが腱鞘炎の治療に役立つことは世界のどこに行っても変わらない普遍的な事実だ。だが、関節に優しいC++のrange-based forでも出来ないことがある。複数のコンテナのイテレーションだ。これだけは素直にwhil…

大学生でもわかる!双方向連結リストの実装!

Twitterを見る限り大学2年では双方向リストの実装を課題として課されることが多いようだ。もちろん弊学もその課題がある。ご学友がイテレータやリストへの要素の削除などで苦労していた。別に難しいことはないのでリストの実装を書く。 リストというデータ構…

イテレータを作る回

STLのコンテナを操作するための共通の手段としてiteratorというものがある。とても便利なこのiteratorを自分で実装したことはあるだろうか。iteratorの要件は規格書に書いてあるので、それさえ満たせばどんなイテレータもiteratorを名乗っていいことになる。…

大学でC++の演習が始まったがムーブには触れないようなので触れさせる

弊学ではC++の演習が始まったが演習では右辺値参照とかムーブとかは全く触れない。ムーブがないC++はC++ではなくBetter Cというのはさすがに言い過ぎだが (C++03以前のC++がC++ではなくなってしまうため)、ムーブがないC++を書くならわざわざ大学でC++を学ぶ…

大学でC++の演習が始まったが例外には触れないようなので触れさせる

例外の構文 例外を投げる 例外をキャッチする 例外の基本 診断のためのライブラリ 例外仕様 古の方法 (C++17で削除) クールでスマートな最新の方法 例外を投げるべきときと投げるべきでないとき 例外は本当に便利な機能だ。戻り値でエラーを通知するC的な関…

大学でC++の演習が始まったがテンプレートには触れないようなので触れさせる

テンプレートの文法 テンプレートの初歩 テンプレートの特殊化 標準ライブラリみたいなかっこいいメタ関数を作る is_same 二つの型が加算可能か確かめる 型制約 嫌な奴は定義してやらない方法 std::enable_ifを使う方法 テンプレートで遊ぼう。(FizzBuzz) あ…

tokenizerとcsvパーサを作った。

いずれ作らなければならないと思っていたものをついに作った。私の大学では2年でC++をやる。C++erの私としては非常にうれしいことである。ただ、大学のPCはBoostが入らない*1ので、自分でBoostのような汎用ライブラリを作る以外に手はない。 知り合いの先輩…

C++でスライスみたいなやつ

Twitterを見ているとTLの者がよく「C++でスライスしてぇ~~~」と言っている。私はたまたまC++が書けるので、なんとなくスライスのようなものを実装してみようと思う。 まずスライスの文法からおさらいする。RustやGoではスライスが言語機能なのでかなり簡…

C++でforループを短く書く

#define REP(i, n) for(unsigned i = 0; i < (n); ++i)みたいなマクロはとても有名だ。N回のループをとても短く書くことができる。だが、これはあまりにもC++的ではない。nにsignedな変数を渡した瞬間コンパイラが警告を出すし.....まあとにかくマクロを使わ…