UTF-8 BOMなしでコードを書いていますと,
「warning C4819: ファイルは、現在のコード ページ (932) で表示できない文字を含んでいます。データの損失を防ぐために、ファイルを Unicode 形式で保存してください。」
と言われます.いや,Unicodeですがな,と思うのですが,Visual StudioはUTF-8 BOMありでないとUnicodeとして扱ってくれないらしいのです.コメントに日本語を使うのをやめるのがよいでしょうか.
2013年8月24日土曜日
2013年2月17日日曜日
cudaMallocの速度
cudaMallocに要する時間の測定結果.
環境
環境
- windows 8 64bit
- visual c++ 2010 express
- cuda 5.0
- intel core-i5 3317 1.70GHz
- GeForce GT 620M
- cudaMallocとcudaFreeだけ,転送はしない
- 0.3msec / cudaMalloc()
- サイズ4Mくらいまでは一定時間と考えてよい
- 大規模な処理なら無視できるが,時間にシビアな用途(画像処理など,1/60=16.7msecで作業を終わらせる必要があるなど)では,複数回実行すると実行時間に影響を与えるレベル.
ラベル:
c++,
CUDA,
programming,
windows
2013年2月14日木曜日
typedefされている型が,同じかどうか調べる
typedefされている型が,同じかどうか調べる.
typeidを使う.
typeinfoをインクルードする.
typeidを使う.
typeinfoをインクルードする.
#include <iostream>
#include <typeinfo>
typedef int type_a;
typedef int type_b;
typedef short type_c;
int main(int argc, char **argv)
{
if (typeid(type_a) == typeid(type_b)) {
std::cout << "same" << std::endl;
} else {
std::cout << "different" << std::endl;
}
if (typeid(type_a) == typeid(type_c)) {
std::cout << "same" << std::endl;
} else {
std::cout << "different" << std::endl;
}
return 0;
}
2012年12月22日土曜日
ifstream でテキストファイルを読み込む場合のあれこれ
ファイル名の指定
C++11から,std::stringが直接使えるようになったが,
C++11以前は const char * のみ.
std::string filename("hoge.txt");
std::ifstream f(filename.c_str());
ファイルが正しく開いたかのチェック
bad()ではダメで,fail()を使う.あるいは,!f でもよろしい.! 演算子は fail と同じ.
http://en.cppreference.com/w/cpp/io/basic_ifstream
しかし,宣言だけしてファイルを開く処理を行っていない場合(うっかり忘れている場合)も fail() は false なので,結局,is_open() ファイルオープンの検査には最良か.
順に,宣言だけ,ファイルあり,ファイルなし
f true,true,false
f.bad() false,false,false
f.fail() false,false,true
f.good() true,true,false
f.is_open() false,true,false
また当然の挙動であるが,
f.eof() false,false,false
たとえ,サイズ0バイトのファイルを開いても,f.eof()はtrueにならない(読み込み処理を一度でも行わないとフラグが立たないと思われる.まあそれはそうだろう).
以下,テスト用のコード:
std::ifstream f;
f.open("sample.txt");
if (f) {
std::cout << "f" << std::endl;
}
if (f.fail()) {
std::cout << "f.fail" << std::endl;
}
if (f.bad()) {
std::cout << "f.bad" << std::endl;
}
if (f.good()) {
std::cout << "f.good" << std::endl;
}
if (f.is_open()) {
std::cout << "f.is_open" << std::endl;
}
if (f.eof()) {
std::cout << "f.eof" << std::endl;
}
行末の改行は削除される.
#include <fstream>
#include <string>
std::ifstream f("sample.txt");
std::string s;
std::getline(f, s);
if (f) {
std::cout << "f" << std::endl;
}
if (f.fail()) {
std::cout << "f.fail" << std::endl;
}
if (f.bad()) {
std::cout << "f.bad" << std::endl;
}
if (f.good()) {
std::cout << "f.good" << std::endl;
}
if (f.is_open()) {
std::cout << "f.is_open" << std::endl;
}
if (f.eof()) {
std::cout << "f.eof" << std::endl;
}
ファイルから1行 string に読み込む
ifstreamのメンバ関数ではなくて,std::getline を使う.行末の改行は削除される.
#include <fstream>
#include <string>
std::ifstream f("sample.txt");
std::string s;
std::getline(f, s);
ファイルの終端に達したかチェックする
f.eof()を使ってwhileでくりかえせばよい.1行ずつ読み込んでから解釈するのであれば,これで十分.
登録:
投稿 (Atom)
