1 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:00:47 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
101 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:43:03 ] operator[]の前行にpublic:
102 名前:デフォルトの名無しさん [2008/03/16(日) 00:45:09 ] >>100 private継承しようとするとpush_backが使えなかったので、public継承にしました。 >>99 これってどう継承してもよびだせないということですか?
103 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:51:53 ] class cvector -> struct cvector >int index = (n >= 0) ? n : this->size()-n; this->size()-nだとリングにならないよ (n >= 0) ? n : (size() - (-n % size())); あと、 と書くとレスに連続した半角空白を入れられる
104 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:53:38 ] operator[] が private だから呼べねーよ! ってコンパイルエラーだな。
105 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:05:00 ] 負の数を認めない型の値の最上位ビットが立っているかどうかなら、 1 << (sizeof(type) * 8 - 1) とand取ってifすれば得られるぜ。
106 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:10:48 ] そこまでして符号無しにこだわる必要は無いと思うというか、 その時点で引数を符号無しにするべきではないと思うというか。
107 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:26:05 ] 符号なしにしないとオーバーライドできない、っていうか、 operator[]はvirtualじゃないからオーバーライドできない。
108 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:26:55 ] ならオーバーロードで
109 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:32:28 ] そもそも vector を public 継承しようとしている時点であれというか。 vector とは性質的に別ものだから内包して自分でメンバ定義していくのが正しい。 単純な委譲で済む関数はインライン関数にしとけばインライン展開されるだろうし。 どうしても継承したいなら private 継承して、 size() とかそのままでいい関数は using する。
110 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:34:09 ] つうか普通このケースでは包含だよなぁ
111 名前:デフォルトの名無しさん [2008/03/16(日) 01:42:27 ] 質問よろしいですか? 0 1 2 3 4 5 6 7 8 このようになっている時にクラーメルの公式のように(掛け算ではありませんが) 1+5+6というふうにするにはfor文でどのようにすればいいのでしょうか?
112 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:57:23 ] int data[3][3]; とするならば int sum = 0; for(int i=0; i<3; i++) { int x = data[i][(i + 1) % 3]; sum += x; } // sum = 1+5+6 = 12
113 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:01:02 ] 3つしかあり得ないならハードコーディングするのも手だと思う。 for 使うなら % だろうけど、逆向きの時は少し注意が必要(i が負になるとマズい)。
114 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:05:16 ] 配列アクセス用のインデクステーブルを作るとか
115 名前:デフォルトの名無しさん [2008/03/16(日) 02:05:33 ] >>112 ,113 すいません、言葉が足りてませんでした 配列は固定ではなくN×N行列で ポインタを*paとする時 pa pa+1 pa+2 pa+3 pa+4 pa+5 pa+6 pa+7 pa+8 でどう求めるかということでお願いします
116 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:12:47 ] [i][(i + 1) % 3] を [i * N + (i + 1) % N] にするだけでしょ。
117 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:14:36 ] for 使うなら % だろうけど、逆向きの時は少し注意が必要(i が負になるとマズい)。
118 名前:デフォルトの名無しさん [2008/03/16(日) 02:21:37 ] >>116 i=0 0*3+(0+1)%3 = 0 i=1 1*3+(1+1)%3 = 3 i=2 2*3+(2+1)%3 = 7 こうなるんじゃないんですか?
119 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:23:30 ] >>118 頭大丈夫か
120 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:26:40 ] 小学生からやりなお(ry
121 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:26:50 ] >>118 とりあえず今日はもう寝とけ
122 名前:デフォルトの名無しさん [2008/03/16(日) 02:26:54 ] >>119 すいません勘違いしてました どうもありがとうございました
123 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:30:09 ] ∧∧ / 中\ ( `ハ´) いつになったら福田康夫は日本人が犯人だと認めるアルか ( ⊃┳⊃ c(_)ヘ⌒ヽフ 【中国産・毒ギョーザ】日本人が“犯人”? 共同通信の日本人記者拘束で中国のネット世論沸騰★5 (朝日(-@∀@) mamono.2ch.net/test/read.cgi/newsplus/1204264902/ ≡≡≡ ◎―◎⊃⊃ キコキコ
124 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:40:32 ] 毒餃子は中国工場内での混入がほぼ間違いなくなったよな。 濃度は3000ppmって。。漬け置きレベルらしいな。 シナはどこまでも外道。オリンピック開催させるなよ。
125 名前:デフォルトの名無しさん [2008/03/16(日) 11:41:33 ] 102です。以下のように実装してみて、動作することを確認しました。でも2点質問させてください。 (1)vectorを継承した方で、size()はusingsしておけばいいといわれましたが、やり方がわかりません。 でも知りたいのでどうか教えてください。 (2)同じくvectorを継承した方で、public継承するのはよくないと言われましたが、(繰り返しになりますが) private継承するとpush_back等のvectorクラスの機能が使えないと思います。ここはどうするべきなのでしょうか? template <typename T> class ring_vector { public: T operator[](const int n) const { int index = (n >= 0) ? (n % v.size()) : (v.size()-(-n % v.size())); return v[index]; } std::vector<T> v; }; template <typename T> class ring_vector2 : public std::vector<T> { public: T operator[](const int n) const { int index = (n >= 0) ? (n % this->size()) : (this->size()-(-n % this->size())); return std::vector<T>::operator[](index); } };
126 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 12:00:48 ] >>125 (1)レスを追ってないから知らん (2)転送関数
127 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:00:00 ] Linux+gccでCPUの型番や周波数などを取得する方法を教えてください
128 名前:103 mailto:sage [2008/03/16(日) 13:00:16 ] >int index = (n >= 0) ? (n % v.size()) : (v.size()-(-n % v.size())); >>103 のは元のソースがreturn [index % size()];なので、それを前提としてたんだけど・・・。 return v[index];にするなら、負の数の方も、もう一度%しないと、 n == -size() のとき、return v[size()]; になっちゃうよ。
129 名前:103 mailto:sage [2008/03/16(日) 13:02:20 ] return v[index]; を return v[index==size()?0:index]; にするのでも良いけど。
130 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:24 ] >>125 ring_vectorの方で良いよ。 継承するの変だと思うし。
131 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:53 ] system("cat /proc/cpuinfo");
132 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:12:54 ] クラスで場合によっては定義しない変数は宣言できますか? ありましたら、どうすればいいか教えてください。
133 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:17:07 ] template <typename T> class ring_vector3 : private std::vector<T> { typedef std::vector<T> parent; public: T operator[](const int n) const { int index = (n >= 0) ? (n % this->size()) : (this->size()-(-n % this->size())); return parent::operator[](index); } using parent::push_back; }; みたいな。
134 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:24:34 ] >>132 質問をもう少しkwsk
135 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:26:44 ] >>132 使わなければ
136 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:32:21 ] 使わなくても定義は必要じゃね
137 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:38:31 ] だから、仮想デストラクタを持たないvectorを継承すんなよw
138 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:40:56 ] そろそろvirtualから離れようぜ
139 名前:133 mailto:sage [2008/03/16(日) 13:48:13 ] 何か問題が?
140 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:53:31 ] >>139 使い方によってはvectorのデストラクタが呼ばれないことがある。
141 名前:133 mailto:sage [2008/03/16(日) 13:56:17 ] 使い方?vector<T> *にキャストする話? 出来るの?private継承なのに。
142 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:14:38 ] >>141 定義をそれ以上いじらなければ問題ないっしょ。 std::vector<T>* p() {return this;} みたいなメンバ関数を追加したりすれば、 privateな継承でも基底のポインタが得られるので、 単にprivate継承であるというだけで常に安心できるわけではない。
143 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:17:26 ] それをdeleteしたら吹くw
144 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:23:24 ] そんなメンバをつくって、しかもdeleteしちゃうような輩は、 vector<int> v;を使わせても delete &v[1];とかするだろうなw
145 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:25:01 ] イテレータは循環するようにしなくていいのか?
146 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:28:34 ] ちょw end()どこだよw コンテナじゃないんだし、いらないっしょ
147 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:35:21 ] どのイテレータをインクリメントしてもendと等しくはならない、とか
148 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:46:28 ] STLのアルゴリズムに食わせられないじゃん
149 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:48:38 ] >>134-135 extern BMPImgData bmpA; extern BMPImgData bmpB; class BMPImgData { public: HDC mHdc; int w; //幅、高さ int h; int anmx; int mv; //・・・・ //↓bmpAには不要 POINT ptgt; //リアルマップ座標(移動)0~10 POINT tgt; //目標リアルマップ座標 POINT Root[MAX_MAPX][MAX_MAPY]; //マップ座標 //・・・ BMPImgData(); ~BMPImgData(); }; 多次元とか宣言すると不安で不安で。 もしかして宣言ってメモリ確保しなければ全然処理重くならないですか? すげえ初歩ですが。
150 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:53:38 ] メモリを喰うのが嫌ならクラスを分けるか、 動的に確保するしかないかと
151 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:03:56 ] >>149 bmpAに不要なメンバを BMPImgData から除去して、BMPImgDataを継承した別クラスBMPImgData2にそのメンバを追加すれば? BMPImgData bmpA; BMPImgData2 bmpB; もちろん、クラス名は適切に。
152 名前:デフォルトの名無しさん [2008/03/16(日) 15:13:50 ] namespace AAA { void func() {} } class Hoge { friend void AAA::func(); }; とするとコンパイルできません。どうすればよいですか?
153 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:15:57 ] >>152 >どうすればよいですか? コンパイルエラーのメッセージを書く。 そのメッセージについて>>152 が何を考えて、何が分からないのかを書く。 エラーメッセージの内容を調べて無いなら、調べてから出直し。
154 名前:149 mailto:sage [2008/03/16(日) 16:02:00 ] >>150-151 ありがとうございます。^^
155 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:02:38 ] >^^ むかつくからやめろ
156 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:11:29 ] ^^;
157 名前:デフォルトの名無しさん [2008/03/16(日) 16:20:40 ] --;
158 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:54:21 ] (;:. @u@)
159 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:08:37 ] vectorやらlistを使用する際 コンストラクタで指定した長さ以上の要素を食わせるとどうなるのでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:09:22 ] >>159 「食わせる」って何?
161 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:10:32 ] ああ、すいません 要素数20のlistに21個目の要素を追加しようとするとどうなるのかなぁと
162 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:11:03 ] int型の変数をchar型の配列にするにはどうすればいいのでしょうか?
163 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:13:13 ] >>161 そりゃ、追加されるんだろ。
164 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:15:17 ] >>161 STLのコンテナは、追加はいくらでもやってよい。 コンストラクタで要素数を指定するのは、 あらかじめメモリを確保しておくことで、後から再確保するのを防ぐ、単なる最適化に過ぎない。
165 名前:164 mailto:sage [2008/03/16(日) 18:17:49 ] すまん、reserveと勘違いした。 コンストラクタで指定した要素数は、ちゃんと要素が追加されるよな。
166 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:21:25 ] v[20] = 1; とかで追加した気になってるかもしれないから 「追加」 の定義をきちんと聞いておいた方がいいぜ。
167 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:26:50 ] >>166 それは既存要素に対する代入だろ。sizeには反映されない。 下手したらコンテナの整合性を壊す。 て、>>166 は言いたいんだと思う。
168 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:11:13 ] >>162 やりたいことをもっと明確に説明しないと回答のしようが無い。 たとえば12345という値を持つint型変数があったとして、どのような状態のchar配列が欲しいんだ?
169 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:32:59 ] >>162 int型をchar型の要素数4(とは限らんが)の配列として扱うの? それなら共用体になるが
170 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:45:07 ] ありがとうございます 共用体しらべてみます
171 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 20:19:59 ] >>170 エンディアンには気をつけてな どうせsprintfとかいうオチだとは思うが
172 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:21:29 ] www.imgup.org/iup575962.jpg.html ・・・VISUAL C++というソフトを使っていたら突然こうなりました OSはVISTAで、これ以降いくらプロジェクトを作成しようとも、どうやら自動生成されるファイルが欠落しているようです アンインストール、再インストールも試しましたが無駄でした、当然管理者権限もです。 どうすればいいでしょうか?
173 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:32:10 ] メッセージのファイルはあったか?あったらそれを直接クリックしてみな。
174 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:36:03 ] >>173 なかったです、正常動作している友人のプロジェクトフォルダを丸ごとZIPで送ってもらったら DEBUGフォルダがありましたが、自分のほうでは生成されなくなってました
175 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:38:59 ] ウイルス・・・じゃないよな? 今までは正常に実行できてたんだよな?
176 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:48:51 ] ないってことは、コンパイルされた結果のファイルが無いんだな。 リビルドして、出力ウインドウにエラーメッセージがないか確認するべし。 プロジェクトのプロパティーページのリンクの項の出力ファイルのパスを確認しよう。その友人のプロジェクトが絶対パスになってないか?
177 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:51:08 ] VC2005 って Vista に対応してたっけ?
178 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:08 ] Vista対応パッチがあるという話は聞いたゾ。俺Xpだからよくわかんね
179 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:50 ] >>176 // test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } これに int main(void) { return 0;} これを書き足してリビルドしたら 1>------ すべてのリビルド開始: プロジェクト: test, 構成: Debug Win32 ------ 1>プロジェクト 'test'、構成 'Debug|Win32' の中間出力ファイルを削除しています。 1>コンパイルしています... 1>stdafx.cpp 1>test.cpp 1>コードを生成中... 1>マニフェストをリソースにコンパイルしています... 1>リンクしています... 1>LINK : 前回のインクリメンタル リンクで C:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\Debug\test.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。 1>LINK : warning LNK4067: エントリ ポイントがあいまいです。'mainCRTStartup' が選択されます。 1>マニフェストを埋め込んでいます... 1>ビルドログは "file://c:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\test\Debug\BuildLog.htm" に保存されました。 1>test - エラー 0、警告 1 ========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ========== で、ぱっとみは何とかなったみたいです 再度printfをためしてみます 一旦ありです
180 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:01:22 ] えー
181 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:04:13 ] mainは一個でいいです。どちらか一方だけにしましょう。
182 名前:デフォルトの名無しさん [2008/03/17(月) 04:09:01 ] イテレータを循環に、ってできるのですか?
183 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:26:18 ] 演算子オーバーロードすればできるんじゃね?
184 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 07:29:05 ] 自分でイテレータを作れば。
185 名前:デフォルトの名無しさん [2008/03/17(月) 09:09:35 ] >>183-184 自分でイテレータってつくれるんですか? あと、演算子のオーバーロードでできるんでしょうか?
186 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:11:19 ] できるっていってるじゃない。
187 名前:デフォルトの名無しさん [2008/03/17(月) 10:44:58 ] >>186 もうちょっとだけ具体的に言ってみてよ。
188 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:54:37 ] >>187 何を?
189 名前:デフォルトの名無しさん [2008/03/17(月) 11:09:18 ] 独自イテレータのつ•く•り•か•た
190 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:13:53 ] 質問すればいいじゃん
191 名前:デフォルトの名無しさん [2008/03/17(月) 11:16:27 ] ググッたけどわかりませんでした。
192 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:33:44 ] class iterator {}; できあがり。 これ以上具体的な回答は、質問が具体的でない限りあり得ない。
193 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:03:46 ] ありえないのはオマエの禿頭
194 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:19:10 ] ムキになるなよw
195 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:27:01 ] ムケてるのはオマエの禿頭
196 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:41:30 ] ムケてないのか…
197 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:24:11 ] 包茎で無能じゃ救いようがないよ・・・
198 名前:デフォルトの名無しさん [2008/03/17(月) 14:39:59 ] 包茎で無能だけど禿げてはいないぞ(怒)
199 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:12:57 ] しまった……全部に当てはまる……。
200 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:35:27 ] 包茎で禿げてるから、無能と呼ばれないように頑張るわ……
201 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:56:53 ] 包茎で禿で不能です