Top  > 雑記帳  > キーワード別  > C++

C++に関する雑記

  2002年03月20日(水)   Dev-C++ 5
Dev-C++ 5(4.9.1.0)のbetaがリリースされたのでダウンロードしてみました。 
 
Compile 
-------------------------------------------------------- 
4.01の時のプロジェクトをコンパイルしてみると、makeで「makefileのタイム・スタンプが変だよ」というwarningが出ました。いろいろ試してみましたが、結局、Compile OptionsのところにCompile Delayという設定があって、これで200 millisecondぐらいdelayさせることによりwarningは出なくなりました。 
 
Debug 
-------------------------------------------------------- 
BCBのようにソース・ウィンドウでbreakpointを設定する方式になっていました。「Integrated debugging」という機能だそうです。でも何故かデフォルトではbreakpointを設定した行の表示が黒反転になっていてソースが隠れてしまいます。Editor Propertiesで色を設定してあげないといけませんでした。debug機能そのものはNext StepとStep Overしかなく、4.01でInsight 5を使っていた時の方が使いやすかったと思います。まあまだbetaの出はじめですから、きっと変わってゆくのでしょう。 
 
その他 
-------------------------------------------------------- 
同梱のMinGWが2.95.3-6になっていました。sstreamもちゃんと入っています。 
 
【今日の日経平均】 11,526 -266

  2002年03月12日(火)   Mingw
ひとつ区切りがついたので気になっていたMingwを試してみました。 
Dev-C++ 4.01というIDEとセットになったものです。 
 
gccが2.95.2と1999年ごろのものですが、gccのサイトからなどを持ってきて、今までのソースをコンパイルしてみました。 
ただ、ios_baseがなくて、その部分はソースをiosに変えました。 
 
Insight 5というdebuggerも思ったより使いやすい感じです。 
 
BCBのコンソール・アプリケーションと比べると、スタートアップとか初期化の違いでしょうか、実行ファイルサイズも小さく、clock()で計った実行速度も速いです。SKK-JISYO.Lを読んでバイナリ辞書を作る部分は、BCBだと37,924ticksだったのが、6,269ticksになりました。(バイナリ・コンペアして出力ファイルが同じであることも確認済みです。) 
 
【今日の日経平均】 11,607 -311

  2002年03月09日(土)   npos
一応送り仮名も含めた最長一致のルーチンを組み、コンパイルが通るところまでは確認しましたが、何かまだすっきりしないものを感じます。こういう時には大抵見落としがあるものです。 
 
STLのstringのfindを使ってみましたが、BCBのヘルプには見つからない時、nposを返す、と書かれています。nposは-1のstaticになっていますが、nposかときく時にはstring::nposと書かなければいけないのですね。コンパイル時にnot definedが出たので少し考えてしまいました。 
 
本日の自転車の走行距離は7kmでした。

  2002年03月08日(金)   memcpy
ようやく最長一致のルーチンの所にかえってきました。深いサブルーチンかスタックから順々に戻ってきたような感じです。 
 
STLのcopyはcharなどのタイプならmemcpyの代わりに使えることがわかりました。例えば、char a[100] を char b[100]にコピーする時、 
 
std::copy(a,&a[100],b); 
 
でいいみたいです。実装はどうなっているのか、効率がいいのかどうかはよくわかりませんが。 
 
【今日の日経平均】 11,885 +237

  2002年03月07日(木)   二度目
やっと新しい形式の辞書の作成ルーチンができました。ソース→バイナイリ出力→バイナリ入力→テキスト出力というところです。 
この間もそうですが、どうしてもここで一区切り、という気持ちになります。この先、この辞書を使う処理の方が本来なのに。 
 
あと昨日のequal_range( )で対象がない時のチェックは、結局 
 
if (it.first == xxx.end( )) ではダメで、 
if (it.first == it.second) ならOKでした。 
 
まあ範囲でしばっているので、end( )をそのコンテナの終りという意味だとすると、わからないではないですが、探して最後までいってしまったという意味なら、firstがend( )でもいいような気がしました。 
 
【今日の日経平均】 11,648 +289

  2002年03月06日(水)   equal_range( )
新しい辞書を作るプログラムはまだできていません。今ようやくバイナリ書き出し処理の途中です。mapが三層になるとfirstとsecondがあふれてくるので、どうも頭が混乱します。 
 
ところで、multimapにequal_range( )をかけて、それに相当する要素が一つもなかったかどうかを調べるには、どちらが普通なのでしょう。 
 
if (it.first == xxx.end( )) 
if (it.first == it.second) 
 
アルゴリズムのequal_range( )のBCBのヘルプを見ると、見つからなかった場合はit.firstとit.secondは等しくなる、と書いてあります。 
multimapのequal_range( )の部分には、equal_range( )はlower_bound(x), upper_bound(x) のペアを返す、とあって、lower_bound( ), upper_bound( )は見つからなかった時、end( )を返すとあります。 
 
きっと見つからなかった時は、it.first == it.second == end( )で、どちらの書き方でも同じ気もしますが、何となくひっかかります。 
簡単なテストをしてみればすぐわかることなのですが、まだ今のソースが単体でコンパイルするところまでもいっていないので、作動チェックの時に調べてみようと思います。 
 
【今日の日経平均】 11,358 +10

  2002年02月23日(土)   namespace
昨日の2つのテーブルをハンドリングするルーチンをクラスにまとめ直してみました。ifstreamなどを使っているので、using namespace std;を入れているのですが、どうもすっきりしない感じです。 
 
A.ccp / A.h(クラスA:ifstreamなどを含む) 
B.cpp / B.h(クラスB:ifstreamなどを含む) 
 
でA.hの中で指定しているクラスAのオブジェクトをB.hの中で指定しているクラスBの内部に持っている場合、B.hではA.hを#includeしますが、その時A.hにもB.hにもusing namespace std;を入れておくべきか、A.hにすでにusing namespace std;があり、それをB.hではincludeしているのだから、B.hにはusing namespace std;を入れないのが普通なのか、今一つよくわかりません。 
 
個々にstd::で修飾しておけばいいのでしょうが、それも面倒です。やっぱりちゃんとしたC++の本を読まないといけないかなと思っています。 
 
そういえばBCBのバージョン6の案内が来ていました。6月までなのでゆっくり考えようと思います。 
 
本日の自転車の走行距離は6kmでした。