2018-01-01から1年間の記事一覧

C++のgetlineでstringをsplitする際の注意点2

C++のgetlineでstringをsplitする際の注意点 - bettamodokiのメモのつづき. Pythonのsplit関数の挙動を確認してみた. print("aaa,bbb,ccc".split(',')) # => ['aaa', 'bbb', 'ccc'] print("aaa,bbb,,ccc".split(',')) # => ['aaa', 'bbb', '', 'ccc'] print(…

C++のgetlineでstringをsplitする際の注意点

C++においてstringをある文字で分割したい場合に, getlineを使って実装する例が検索するとよく出てくるが特殊な場合に罠に陥るので注意. 例えば以下のような実装(https://faithandbrave.hateblo.jp/entry/2014/05/01/171631 を一部改変). #include <iostream> #include <string></string></iostream>…

Cythonのconst_iterator

CythonのC++対応についてはだいぶ怪しいところがある. また, const対応についても同じくである.constは関数引数内では利用できるため, std::vector const&を引数とする関数を作成したときに, const_iteratorでループを書く必要があった. ここで通常のC++の通…

何も考えずにRustに入門する5

Rustではソースコード中のコメントからドキュメントを作成できる."cargo doc"コマンドがそれだが, 上の例だと"error: cannot document a package where a library and a binary have the same name. Consider renaming one or marking the target as `doc = …

何も考えずにRustに入門する4

Rustにはそもそもユニットテストフレームワークがあるようだ. "cargo test"とするとテストが実行される.今回は自前で"src/lib.rs"を用意したので, このままだと何もテストされない. というわけでユニットテストを書いてみる. #[macro_use] extern crate log;…

何も考えずにRustに入門する3

"main"から呼び出す自前の関数はクレートとして分けておきたい. ライブラリとして切り出せそうなものは"main.rs"とは別のファイルにまとめることにする.まず, "src/lib.rs"というファイルを作成し, 自前の関数などはこちらに記述する. 上の例の場合, #[macro…

何も考えずにRustに入門する2

つづいてログメッセージを出力できるようにする. そのためにはまず依存するクレートCrateを宣言して読み込む必要がある.まずは"Cargo.toml"の依存関係に"log"と"env_logger"を追加する. [dependencies] log = "*" env_logger = "*"あとはコードでこれらを呼…

何も考えずにRustに入門する1

Bash on Ubuntu on Windows (Windows 10)でやる.とりまインストールから. sudo apt-get install rustc cargo実行可能アプリケーションのプロジェクトをおもむろに作成して実行する. ~$ cargo new bar --bin Created binary (application) `bar` project ~$ c…