タグ

ブックマーク / saito.hatenablog.jp (2)

  • テキストファイルの全部を読んで行単位にする - 主題のない日記

    プログラミング言語 C でテキスト処理をしようと思うと何かと面倒なことは多い。 ただ行ごとに読むというだけのことにでもひどく手間をかけさせられてしまう。 それをなんとか工夫して実装しようとしている記事を読んだ。 もう 20 年ほど前のことになるが、私はチャット CGI を C で書いたことがあり、その中で似たようなことをやったというのを思い出した。 そのときの技法 (というほど大したものではないが) を紹介したいと思う。 考え方 結局ファイル全部を読むのだから一度に読んでしまえば良いではないかというのが基的な発想だ。 fread 関数を使ってテキスト全部を読めば改行で区切られたひとつの文字列が出来上がる。 改行をヌル文字に置換えた上でそれぞれの行の先頭を指すポインタの配列を作れば、見掛け上は行ごとの文字列になっているかのように見える。 ちなみに、以下の実装では改行が 0d 0a の2バイ

    テキストファイルの全部を読んで行単位にする - 主題のない日記
    fa11enprince
    fa11enprince 2016/01/29
    素晴らしい技法です!使い方も自然だし。
  • const rvalue をムーブ元にする - 主題のない日記

    C++11 で追加された機能の内で重要なもののひとつがムーブセマンティクスだ。 言語のコアに追加されたのは参照の区別であり、それがあると値を複製せずに移動 (所有権の移動) だけで済ませてしまえる場合があるので性能的に有利というものである。 さて、所有権を移動させるということは移動元を破壊してしまう。 関数の返却値を const にすると破壊するわけにいかず、ムーブが機能しない。 故に関数の返却値は基的に const は付けない方がよいとする意見を見た。 つまり'+', '-', '*', '/'の演算子のオーバーロードですが、C++11ではconst返ししないほうがいいということでした。 理由はconstを付けてしまうとムーブセマンティクスが働かないからです。 http://fa11enprince.hatenablog.com/entry/2014/11/25/004307 しかし、

    const rvalue をムーブ元にする - 主題のない日記
  • 1