タグ

cppに関するsyou6162のブックマーク (62)

  • UTF8の文字数を数える – Stories of Your Life and Others

    つい最近、UTF8文字列を扱う処理を書いたのでその実装方法についてのお話です。 今日の問題設定は、天下一プログラマーコンテストの例題でも有名になりましたが、UTF8の文字数カウントです。 UTF8の文字列形式について詳しくはWikipediaを見て頂ければいいかと思いますが、 http://ja.wikipedia.org/wiki/UTF-8 簡単に紹介すると、UTF8は一文字1-6バイト(最近は1-4バイトのみ)からなるエンコード形式であり、各文字が何バイトから構成されているかはその文字の1バイト目を見ればわかります。 例えば1バイト文字の場合は7bitのASCII文字から構成されていて、1バイト目の上位ビットが「0」となります。 2バイトの場合は「110」, 3バイトの場合は「1110」という風に以降、上位ビットの1の数と1文字あたりのバイト数が等しくなります。 また先頭バイト

  • 2007-02-18

    仕組みが判ってしまえば Makefile は簡潔に書けます.$(CC) とか $@ とか $< なんて変数は使ったら負けです. 基(その1) ソースコード hoge.c から 実行形式のバイナリ hoge を生成するMakefileは,以下のように書きましょう all: hogeこれだけです.これで $ make all とすると hoge が生成されます 重要な点は,間違っても all: hoge hoge: hoge.c $(CC) hoge.c -o hogeのようなMakefileを書かないことです.このようなMakefileでは #!/bin/sh CC=gcc $CC hoge.c -o hoge というようなシェルスクリプトと同程度の使い勝手しかありません. 基(その2) ここで例えば-O3 を付けてコンパイルしたい場合や,-lm を付けてリンクしたい場合は以下のようにし

    2007-02-18
    syou6162
    syou6162 2010/05/21
    全然知らなかった
  • 続、Makefileの書き方再入門。簡潔なMakefile編 - フリーフォーム フリークアウト

    移転しました http://please-sleep.cou929.nu/20090930.html

    続、Makefileの書き方再入門。簡潔なMakefile編 - フリーフォーム フリークアウト
  • GitHub - mattsan/BitOperation: operating bits classes

    syou6162
    syou6162 2010/03/04
  • Ruby Programing with SWIG

    はじめに Rubyと同じく、C++もクラスをもっています。 SwigをつかえばC++のクラスをそのままRubyのクラスにすることができます。 SwigのドキュメントにC++の章がありますので、 まずはそちら "5 SWIGとC++" を読みましょう。 C++で書かれたあるソフトをswigを利用してラップする場合、 インストールされるヘッダーファイルがたいへん役に立ちます。 運が良ければそのヘッダーファイルがそのまま使えますが、 多くの場合多少変更が必要となります。 ここでは、 C++で書かれたソフトをラップする際に必要ないくつかの変更の解説を行います。 まずはヘッダーファイルをそのまま使ってみよう とりあえずヘッダーファイルをそのまま使ってみましょう。 そのままで問題なくコンパイルでき、かつ使えたあなたは幸運です。 だめな場合でもエラーメッセージがとても重要な情報となります。 以下のように

  • TopCoderから学ぶ美しいマクロや型宣言 C++ - peroon's diary

    TopCoderというプログラミングコンテストで 他人のコードから発見した、美しいマクロや 型宣言を紹介します。 これを導入することで、C++のコードが短くなり、 早くコーディングすることができます。 ※すべてのTopCoder参加者がマクロなどをテンプレートと して用意しているわけではありません。 マクロなどを定義している人は半分より少ないようです。 TopCoderの他人のコードを参考に、 マクロやtypedefによる型宣言をまとめました。 コードの全体はこのようになっています。 (あとで個別にコメントします) //include //------------------------------------------ #include <vector> #include <list> #include <map> #include <set> #include <deque> #in

    TopCoderから学ぶ美しいマクロや型宣言 C++ - peroon's diary
  • c++ namespace collision with gtest and boost

    If I include both gtest/gtest.h and boost/math/distributions/poisson.hpp I get /opt/local/include/boost/tr1/tuple.hpp:63: error: ‘tuple’ is already declared in this scope /opt/local/include/boost/tr1/tuple.hpp:67: error: ‘make_tuple’ is already declared in this scope /opt/local/include/boost/tr1/tuple.hpp:68: error: ‘tie’ is already declared in this scope /opt/local/include/boost/tr1/tuple.hpp:68:

    c++ namespace collision with gtest and boost
  • バイナリファイルの読み込みと書き込み - インコのC++プログラミング

    バイナリファイルの書き込み 数式データをバイナリ形式として出力します。 バイナリを使う理由としては、出力されるファイルのデータが小さいことと、ファイルの一部分のみを読み込むときに、読み込みやすいところです。 #include <iostream> #include <fstream> using namespace std; /* コンパイルできないときは上の3行を #include <iostream.h> #include <fstream.h> に変えてみてください。*/ int main(){ ofstream fout; double a[100]; //文字列ではないデータ fout.open("file.txt", ios::out|ios::binary|ios::trunc); // ファイルを開く // ios::out は書き込み専用(省略可) // ios::bin

  • boost::scoped_ptr - sotarokのお勉強

    どっかで new したやつは delete しないとメモリリークする. で,メモリリークわすれをなくすため,スコープを抜けたときにメモリを開放してくれるようにしたい.ってことで scopred_ptr // scpptr.cpp #include <iostream> #include <string> #include <algorithm> #include <boost/scoped_ptr.hpp> using namespace std; void call_func(const string& s) { boost::scoped_ptr<string> str(new string(s)); cout << "Original string: " << *str << endl; reverse(str->begin(), str->end()); cout << "Reve

    boost::scoped_ptr - sotarokのお勉強
  • 日録2009年6月 - アールメカブ

    syou6162
    syou6162 2009/11/13
    なんてこった"R 関連のヘッダよりも上に移動したら,あっさりコンパイラが通った"
  • Spaghetti Source - 有理数

    説明 浮動小数点計算に由来する誤差を避けるための最終兵器.一応数理に区分しているが,当にこれが必要になるのは,幾何の問題のほうが多い. ひととおり定義すべきものを定義してあるので,普通の数を使っているところを形式的に rational に置き換えればだいたい動く.しかし繰り返し計算をしていると分子・分母ともに大きな数となり,オーバーフローすることがあるので,過信は禁物である. ソースコード typedef long long Integer; Integer gcd(Integer a, Integer b) { return a > 0 ? gcd(b % a, a) : b; } struct rational { Integer p, q; void normalize() { // keep q positive if (q < 0) p *= -1, q *= -1; Inte

    syou6162
    syou6162 2009/10/31
  • きまぐれ日記: C++ での ベクトルの正規化の方法

    syou6162
    syou6162 2009/10/31
    正規化
  • C++

    数学関係 其の二 第1部第3章では標準C++にある数学関係の定数や関数をご説明しましたが,ここではそれの第2弾としてBoostの中にある数学関係のライブラリをご紹介します。ただし,Boostは数学関係だけを取り上げても膨大なので,必要と思われるものだけに的を絞って説明します。ここで取り上げるライブラリは以下の4つです。 common_factor:最大公約数(gcd)と最小公倍数(lcm)を求める。 rational:分数(有理数)の計算。 interval:区間演算。 special_functions:逆双曲線関数。 common_factor 最大公約数と最小公倍数を求めるためには『common_factor』を使用します。使い方は至って簡単です。まずは読み込むヘッダですが,これは以下のようになります。

  • マルチスレッドでのechoサーバ - tsubosakaの日記

    マルチスレッドでのechoサーバのメモ server.cc #include <iostream> #include <sstream> #include <pthread.h> #include "ServerSocket.h" #include "Queue.h" using namespace std; string readLine(int sock){ char c; stringstream buffer; while(1){ int ret = read(sock, &c , 1); if(ret == -1){ perror("read"); break; }else if(ret == 0){ break; } buffer << c; if(c == '\n'){ break; } } return buffer.str(); } void * handleReques

    マルチスレッドでのechoサーバ - tsubosakaの日記
  • Loading...

  • yanoの日記

    Chrome 42 から使用可能になった、ページを閉じていても受信可能な Push 通知。updates.html5rocks.com 試してみましたけど、Android で GCM 通知受け取るアプリ作るのとほとんど同じ流れ。 API が PushManager やら ServiceWorker になっているだけ。 ページを閉じているときに通知を受け取れるだけでなく、Chrome を立ち上げていない際に受け取った通知も、次に Chrome を起動した際に表示される。 ただ一つ致命的なのが A downside to the current implementation of the Push API in Chrome is that you can’t send a payload with a push message. Nope, nothing. 通知データを送信できないので、ク

    yanoの日記
    syou6162
    syou6162 2009/10/15
  • Boost.uBLAS で特異値分解(SVD) - yanoの日記

    Boost.uBLAS と Boost.Bindings, clapack をインストールした今,特異値分解を簡単に実装することができます. というのも,Boost.Bindings を通して bindings.lapack.gesvd(lapack.dgesvd) を呼び出すだけだからです. 以下に私の実装例を示します. math.hpp #ifndef MATH_HPP_20090501 #define MATH_HPP_20090501 #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma once #endif #include <boost/numeric/ublas/fwd.hpp> namespace math { void svd(const boost::numeric::ublas::matrix<double>& A

    Boost.uBLAS で特異値分解(SVD) - yanoの日記
    syou6162
    syou6162 2009/10/15
    SVDSVD!
  • Boost で正規乱数の生成 - yanoの日記

    シミュレーション実験を行っていると正規乱数が必要になることがよくあります.正規乱数はかなり基的な乱数であるためさまざまなライブラリに実装されているのですが,私は Boost をよく使っているので,正規乱数でも Boost を使用して発生させています. しかし Boost の実装は柔軟性を求め過ぎるあまり使いやすさを失ってしまっているように感じます(単に正規乱数を発生させたい人にとっては).というのも,Boost で正規乱数を発生させるためにはまず一様分布を発生させるエンジンを選び,それを適切にコンストラクトする必要があります.エンジンによってはテンプレート化されたコンストラクタをもつため,エンジンを適切に初期化するためにはコンストラクタに渡す種(seed)の型を正確に一致させる必要があります(そうしなければテンプレート化されたコンストラクタが呼ばれてしまいます).その後 normal_d

    Boost で正規乱数の生成 - yanoの日記
  • Boost.uBLAS の遅延評価について - yanoの日記

    今回は uBLAS の遅延評価について説明します. uBLAS が他の数ある行列演算ライブラリと比べもっとも性質を異にしているものがこの遅延評価です. これは uBLAS 最大の特徴であり,Expression template という技法により実現されています. その実装はとても複雑ですが,実際に uBLAS を利用するユーザはそのことを意識しなくてもよい作りになっています. Expression template については以下が詳しいです. Expression Template しかし効率的なプログラムを書くという点で,この uBLAS の遅延評価について知っておくことは決して損にはならないでしょう. さて,次のようなコードを考えます. matrix A, B; prod(A, B); 何が起きるでしょうか?普通のライブラリなら prod 内で行列 A と行列 B の乗算が行われ,

    Boost.uBLAS の遅延評価について - yanoの日記
    syou6162
    syou6162 2009/10/15
    遅延評価もできるのか
  • Boost.uBLAS で最小二乗法 - yanoの日記

    今回は AX = B の最小二乗解(Least squares solution),あるいは最小ノルム解(Minimum norm solution)を計算します.lapack を用いてこれを計算するには dgels, dgelss, dgelsd という関数を用いればよく,対応する bindings のヘッダファイルは gels.hpp, gelss.hpp, gelsd.hpp になっています.しかしこれらのヘッダファイルの作者は MSVC 環境でしかテストしていないのか,typename が抜けている箇所がいくつもあります.そのため標準準拠なコンパイラではこれらのヘッダを使用することができません. この問題はバージョン bindings-20081116 でようやく修正されました. つまり何が言いたいのかというと,今回のプログラムは bindings-20081116 以降のバージョ

    Boost.uBLAS で最小二乗法 - yanoの日記