2019-01-01から1年間の記事一覧
これは最近実装したやつの解説です。主に自分が忘れたときのための備忘録として書いていますから他の人が読むにはあんまり親切ではないかもしれません。 静的なのと動的なの C++のテンプレートはとても強力なので大抵のことはテンプレートで解決できる。行列…
久しぶりにネタになりそうなことが見つかったのだ!更新してないからか、読む人はめちゃめちゃ少ないのだけれど、ありがたいことに0人ではないので、せっかく見つかったネタを自分だけの知見とせずにアウトプットしたいと思う。 またC++の話だけれど、ライブ…
情報工学科で出る定番の課題といえば、ソートアルゴリズムの実装だ (多分) (他の大学を知らない) 。 普通の人間は愚直に実行時に配列などをソートしてしまうかもしれない。私も高校時代にこの課題が出ていたら普通に実行時にソートして喜んでいただろう。 だ…
C++は健康に良い。C++11で導入されたrange-based forが腱鞘炎の治療に役立つことは世界のどこに行っても変わらない普遍的な事実だ。だが、関節に優しいC++のrange-based forでも出来ないことがある。複数のコンテナのイテレーションだ。これだけは素直にwhil…
Twitterを見る限り大学2年では双方向リストの実装を課題として課されることが多いようだ。もちろん弊学もその課題がある。ご学友がイテレータやリストへの要素の削除などで苦労していた。別に難しいことはないのでリストの実装を書く。 リストというデータ構…
フィボナッチ数列はループで書くより再帰で書いた方が書きやすい。ループではプログラマーが意識して変数を3つほど宣言する必要があるが、再帰で書けば変数は要らない。ただ、再帰には以下のような極めて致命的な問題がある。 まず再帰は関数呼び出しなので…
STLのコンテナを操作するための共通の手段としてiteratorというものがある。とても便利なこのiteratorを自分で実装したことはあるだろうか。iteratorの要件は規格書に書いてあるので、それさえ満たせばどんなイテレータもiteratorを名乗っていいことになる。…
弊学ではC++の演習が始まったが演習では右辺値参照とかムーブとかは全く触れない。ムーブがないC++はC++ではなくBetter Cというのはさすがに言い過ぎだが (C++03以前のC++がC++ではなくなってしまうため)、ムーブがないC++を書くならわざわざ大学でC++を学ぶ…
例外の構文 例外を投げる 例外をキャッチする 例外の基本 診断のためのライブラリ 例外仕様 古の方法 (C++17で削除) クールでスマートな最新の方法 例外を投げるべきときと投げるべきでないとき 例外は本当に便利な機能だ。戻り値でエラーを通知するC的な関…
テンプレートの文法 テンプレートの初歩 テンプレートの特殊化 標準ライブラリみたいなかっこいいメタ関数を作る is_same 二つの型が加算可能か確かめる 型制約 嫌な奴は定義してやらない方法 std::enable_ifを使う方法 テンプレートで遊ぼう。(FizzBuzz) あ…
C++ではカンマ演算子をオーバーロードできる。前の記事では残念ながらC++に負けてしまったが、今度こそC++でスライスすべくカンマ演算子をオーバーロードしたプロキシクラスを書いてC++に打ち勝つことにする。 前に作った失敗作はこいつだ。ここにあるslicea…
はてブはアクセス解析でどれくらいアクセスがあるのか見ることができる。なんと私のブログはほぼ誰も見ていない!!!!まあ別に広く見てほしくて書いているわけではないので全く問題ない。 どうせ誰も見てないので普段の私からは想像もつかないような変なこ…
いずれ作らなければならないと思っていたものをついに作った。私の大学では2年でC++をやる。C++erの私としては非常にうれしいことである。ただ、大学のPCはBoostが入らない*1ので、自分でBoostのような汎用ライブラリを作る以外に手はない。 知り合いの先輩…
Twitterを見ているとTLの者がよく「C++でスライスしてぇ~~~」と言っている。私はたまたまC++が書けるので、なんとなくスライスのようなものを実装してみようと思う。 まずスライスの文法からおさらいする。RustやGoではスライスが言語機能なのでかなり簡…
#define REP(i, n) for(unsigned i = 0; i < (n); ++i)みたいなマクロはとても有名だ。N回のループをとても短く書くことができる。だが、これはあまりにもC++的ではない。nにsignedな変数を渡した瞬間コンパイラが警告を出すし.....まあとにかくマクロを使わ…