C++

Win32 Part3 プロセス、スレッド編

ヒープはプロセス一個につき、最初から一個用意されている HeapAlloc、VirtualAllocの違いについては、 http://keicode.com/windows/win11.php が詳しい。 VirtualAllocはページ単位でメモリを操作する。(どっさと領域を調達してくる) たくさんメモリを使…

コピーコンストラクタ

//AutoPtr.h #include <cstring> #include <iostream> class AutoPtr { private: char *ptr; public: AutoPtr(); ~AutoPtr(); char *operator=(char *ptr); operator char* (); char& operator[](int index); //深いコピー AutoPtr(AutoPtr& src); AutoPtr& operator=(AutoPtr& </iostream></cstring>…

クラスメモ4-2

//Map.h #ifndef INCLUDED_PLAYER_H__ #define INCLUDED_PLAYER_H__ #include <utility> using namespace std; class Image; class Map; //Playerはいつでも一人なので、シングルトンにする。 class Player { public: static Player* instance(); void draw() const; </utility>…

クラスメモ4-1

クラスを新しく組むときは、まず、コンストラクタ、デストラクタ、もっとも関係しそうなメンバ変数から先に与えていく。 組んだら、テストして動作するか確かめる。(特に,デストラクタのdelete忘れに気を配る.) で、もう一段複雑にする(関数を入れたり、…

クラスメモPart3-3

Mapのstructをclassに替えたもの。 Array2D<Object> mStageData; の配列がsetSizeで動的に生成されるが、この時もコンストラクタは呼ばれている。Objectクラスのコンストラクタは mFlagを0に初期化するようにしたので、邪魔くさいZeroClearは呼び出す必要がなくなっ</object>…

クラスメモPart3-2

//Map.cpp #include "Map.h" #include "File.h" #include "GameLib/Framework.h" //coutも using namespace GameLib; namespace { //Mapコンストラクタ用 unsigned GetMapSize(const char* stageData) { int x=0; int y=0; int tmp =0; for(int i=0; stageDa…

クラスメモPart5

Mapを作る経過ではまったことをメモ。 まず、.txtをbinaryモードで読み込むと、 \r\nが残る。 これは、char型の \r : 10 \n : 13 にあたる。 あとは、Mapではrow,colではわかりにくいので、x,yとか、height,widthであらわすが、その時、 二次元配列上の”たて…

クラスメモPart3-1

今回はRPG風のゲームを簡単ながら作りたいかな、と考えているので、次はMapで。 とりあえず、典型的なやつを一回作りたいので、行き当たりばったりでやってみる。マップを作るので、マップチップの性質を列挙型に定義する。 #include "Array2D.h" //宣言だけ…

クラスメモPart2

本に沿って、Fileクラスも自分で作る。 //File.h class File { public: File(const char* filename); ~File(); int getSize() const; //constメンバ関数はなるべくつける。 unsigned getUnsigned() const; const char* getData() const; private: int mSize;…

クラスメモPart1-2

Part1をテンプレートで書いてみる。 #ifndef INCLUDED_ARRAY2D_H__ #define INCLUDED_ARRAY2D_H__ template <typename TYPE> class Array2D { public: Array2D(int i,int j); ~Array2D(); void Show(); //表示させる関数 TYPE& operator()(int i, int j); //参照つけないと</typename>…

クラスメモPart1

ゲームプログラマになる前に覚えておきたい技術をやっているが、自分の力不足を認識したので、第一部から第2部に移るときに なんかいろいろ作ったほうがいいだろうと思い、メモ。この本のライブラリを使用。 まず、動的に生成される二次元配列クラスを作る…

c,c++におけるポインタについて

C++

まだ加筆予定 目標は char (*p)[5]を完全に理解するぐらいまでにはポインタを理解すること。 ポインタと配列の違いは一言でいうならば、書き換えができるか否かである。 ポインタと配列の混乱の元 1:配列名aを読み込む場合、aは&a[0]と解釈される。 2:ポイン…

win32 part2 描画編

C++

赤い色の直線を描く赤のペンを作成 赤のペンをデバイスコンテキストにせんたくする 現在位置を直線の視点にセットする 終点まで直線を描く デバイスコンテキストからの赤のペンを選択削除する 赤のペンを削除する WM_PAINTメッセージではBeginPaintで。(更新…

c++

C++

コンストラクタ mallocもnewも必要なメモリ領域をヒープからもらってくるが、mallocには、コンストラクタを呼び出す機能はない。 mallocは仮想関数テーブル迄もを初期化させる。 コピーコンストラクタ: まず、代入と、初期化との区別ができているかどうか?…

c++ 久しぶりなので復習

デストラクタ コンストラクタで動的にメモリを確保したときなどは、手動でメモリを開放しなければならない。 そうしたときに、デストラクタを定義する必要がある。 コピーコンストラクタ オブジェクトが他のオブジェクトで初期化される場合に呼び出されるコ…

ID

線形代数と固有値問題 ひととおり線形代数を学んだ後によむといいかもしれない。できれば、関数解析をちょっとやった後で。スペクトル分解とかの所は結構細かいところまで乗ってるので便利。へぇ、こんな方法でとけるのか、と。でも説明丁寧かといわれるとそ…

ID

単語 rank3::1~~4 --> http://d.hatena.ne.jp/kenta11626918/20111012/1318401749 rank2 --> http://d.hatena.ne.jp/kenta11626918/20111006/1317882668 rank1 -->http://d.hatena.ne.jp/kenta11626918/20111017/1318821771 C34CAFDF85FFCEB9929CD40BD14E730…

SRM321 div2

問題文の読み間違い。k-double stringsの個数を求める.0-strings ~ k-stringsまでの個数を求めるのではない. 問いの文はi-double stringsはk-double strings(i easy int howMuch(vector <string> str, int k) { string s; for(int i = 0, len = str.size(); i < le</string>…

SRM320 div2

easy //やるだけ. //きわめて簡単なコード { int len = s.length(); s += '0'; //番兵.a-zとはちがう要素なので、最後に必ず条件分岐が真になる. int div = 0; //sumはかならずszに等しい.ならば分割数だけを調べればいいじゃないか. for(int i = 0; i …

SRM318 div2

easy //やるだけ。 int findArea(int N) { int aplb = N/2; int a = (aplb&1) ? aplb/2+1 : aplb/2; int b = aplb-a; return a*b; } medium //3種類のゴールの仕方がある. //1:(jump+)walk_forward //2:jump+walk_backward //3:寄り道jump min(1, 2, 3) 三…

SRM317 div2

//ふつうに、0~100000000でループしてたらおそらく間に合わない. //なので、123 4 321みたいになるはずだから、 //m = ss.str(); reverse(m.begin(), m.end() ); と仕込みしておいて、 // string tmp = (i != 10) ? (ss.str() + c + m) : (ss.str() + m);み…

木について。

TopCoderではときどき頭混乱させるような木のデータが与えられるので、まとめ。 //consider to be i = 0-based {-1, 0, 0, 2, 2, 4, 4} //i = 3ばんめの2は、2番目に親があるよってことを示してる. int start = 0; for(int i = 0; i < sz; i++) { if(heap[i…

SRM316 div2

easy 簡単すぎて申し訳ない. string getMessage(string text) { string ans = ""; istringstream iss(text); string tmp; while(iss >> tmp) { ans += tmp[0]; } return ans; } medium 問題把握に時間かかり過ぎ. int fewestClicks(string messages, int l…

SRM315 div2 difficult

easy, mediumは簡単なので、割愛。 //n <= 500000なので、再帰関数は使えない。 //なんか拍子抜けだけど、普通に描く。 1 2 3 4 5 (k = 3) 1 3 5 --> 1 2 3 (k = 2) 1 2 3 (k = 2) //と同値。 class KidsGame { public: int kthKid(int n, int m, int k) { i…

#include listまとめ。

TopCoderではvector一辺倒でなにかと使わないlistですが、カードシャッフル等の操作をするときとかはかなり便利です. explicit list( size_type 長さ, const T& 値 = T() ); //イテレータでの初期化ももちろん可能. list& operator=(const list& c2); bool…

SRM314 div2

easy //計算量を下げるなら、vector<pii>とかで格納しておくのがよい。普通にやると、4じゅうるーぷとかなった、 int dissatisfaction(vector <string> farmland) { int row = farmland.size(); int col = farmland[0].length(); vector<pii> dots; for(int i = 0; i < row; i+</pii></string></pii>…

SRM413 div2

easy こんがらがるな。以上.良くありそうな問題です. int maxCycle(vector <int> board) { int sz = board.size(); int maxi = 0; for(int i = 0; i < sz; i++) { bool used[sz]; memset(used, false, sizeof used); int npos = i; while(1) { if(used[npos]) {</int>…

SRM312 div2 medium

ぶちゃいくコードや.死にたい.boost使いたい. set unitcube; とか構造使っても、ヒープのほうで大小の区別ができないので、別のデータ構造を使った方が良い. //がんばって最適化しようと思えば。 int getVolume(vector <string> parallelepipeds) { set<vector<int> > unitCu</vector<int></string>…

SRM311 div1 easy

全く同じ領域を二度もflipさせることはなさそうだ、ということに気付けば、どん欲法でやっていけば良さそうということが分かる.flipする順序は関係ないので、[0, 0]から順番にtraverseしていけばよさそう. っていうのがぱって浮かんだらな〜。複雑そうだっ…

SRM311 div2 medium

変則的な動的計画法の問題.問題の趣向から、iを逆順に回して最大値を簡単に取得できるようにしている. また、j++とすることで、暗に数字を複数回使ってよいことを表している. もし、 for(int j = n; j >= matches[i]; j--) { ... } としてみると、数字は…