C++

sizeof()はやっぱりバイト数を返す?

C++

プログラミング言語C++の5.3.1に、こう書いてある。 T*型のポインタpに対して算術演算子を適用するとき、pはT型オブジェクトの配列の要素を指しているものとみなされる。p+1は、配列内の次の要素、p-1は手前の要素を指す。そのため、p+1の整数値は、pの整数…

プログラミング言語C++第3版読み中

C++

ひげぽんさんに触発されて、積ん読していたプログラミング言語C++を読み始めた。 一気にスタバで読む・・・のはきついので、少しずつだけど。とりあえず、誤解していたところを発見。 sizeof演算子は、「何バイト」ではなくて「char何個分」でサイズを返す。cha…

C++とオープンソースプロジェクト

C++

最近、仕事関係でswfmillというツールを触っている。今の職場はオープンソースへのコミットを推奨しているので、仕事の時間を使った改造のうち、身内以外でも役に立つ機能はパッチを作って本家に送っている。 しかしswfmillの作者は、Linux上でのC言語による…

自分のメンバ関数をtransform()とかに渡す

C++

方法を探していたら、cppllのML過去ログから発見! http://ml.tietew.jp/cppll/cppll/article/8913 ・・・2003年、「思兼」って俺だなぁ。こんなコメントした覚えあるなぁ。 とりあえずサンプル. #include <vector> #include <algorithm> #include <functional> struct Hoge { using namespace </functional></algorithm></vector>…

メモ:boost::progress_timer

C++

何かの時間を計るときに便利。2回時間を計って差分を表示という一連の手順を、コンストラクタとデストラクタでやってくれる。 http://www.boost.org/libs/timer/timer.htm

pImplパターンとtemplateと

C++

pImpl作っててぶち当たった問題。ドキュメントをIteratorで渡すtemplateメソッドとしてコンストラクタを定義していたんだけど、pImpl使っちゃうとヘッダファイルにコンストラクタ置けないorz で、templateをソースファイルに書くと、templateの利用者がどん…

OOPと参照ベースの相性の良さ

C++

今週も、「SA作ってみよー」の流れで行ってる。 今はドキュメントを元にSAをメモリ上に構築して、そこから検索しているんだけど、もうそろそろSAを保存してあとから使いたい。 で、Javaならクラスメソッドで class Sa { public static Sa fromDocument(Input…

STLの設計者は偉い

C++

5/29の、equal_range()の型縛りの件は、完全にうそでした。 comp(*it, val) と comp(val, *it) が両方通って、<と同じ性質(a

C++で誰もが嵌る罠

C++

関数のローカルでfunctorを作って、その関数オブジェクトをアルゴリズムに渡せない罠。 #include <iostream> #include <numeric> #include <ext/numeric> #include <vector> #include <algorithm> using namespace std; int main(void) { vector<int> v(100); iota(v.begin(), v.end(), 5); struct print_v : public u</int></algorithm></vector></ext/numeric></numeric></iostream>…

ぐはぁ

C++

気づいたらid:odzさんからTBもらってたよ! しかも、Suffix ArrayをHDD上のファイルに適用する段階でstringやめてiterator使おうと思ってたのに、id:odzさんにサクっと作られちゃったよ! 真のSTLプログラマは、まず普通のコード書いてからそれをtemplateに…

std::equal_range()の型縛り

C++

この記事の内容は全部うそです。5/29の日記を参照してください。(5/29)さて,saが構築できたところで,検索しようと思う.各文字の出現回数を保存すれば元文書は消しても良いのだが,それは後回し. のstd::equal_range()は,順列に並んでいるリストから,指…

binder1stはとっても中途半端

C++

引数を2つ取る関数の第一引数に実引数をbindして,引数を一つ取る関数に変換するためのクラス.ちなみに,第二引数にbindするのはbinder2nd.もひとつちなみに、binder1stがやってることをカリー化(curring)という. binder1stはoperator()を提供するクラス…

このブログに乗せているコードは引用を除き CC0 1.0 で提供します。