スレを勃てるまでもないC/C++の質問はここで 20at TECH
スレを勃てるまでもないC/C++の質問はここで 20 - 暇つぶし2ch112:デフォルトの名無しさん
11/10/12 01:55:27.49
>>111
CUSTOMVERTEX2* vertices;
vertices=new CUSTOMVERTEX2[20];

CUSTOMVERTEX2 vertices[20];
で挙動の違いがあるんですか?

ちなみに
VOID* pVertices;
if( FAILED( g_pVB->Lock( 0, sizeof(vertices), (void**)&pVertices, 0 ) ) )
return;
memcpy( pVertices, vertices, sizeof(vertices) );
g_pVB->Unlock();

verticesの中身は上記のような感じでバッファーに渡しています。

113:デフォルトの名無しさん
11/10/12 02:06:05.32
そもそもそれじゃ静的な初期化にもなってないが、
上と下でsizeofが何を返してくるかprintfで確かめたら直ぐに原因は分かる

114:デフォルトの名無しさん
11/10/12 02:07:00.46
>>112
sizeofの結果が変わってくる
sizeof(vertices[0])*20にすればおk

115:デフォルトの名無しさん
11/10/12 10:28:00.33
>>113-114
ありがとうございます。
できました。

116:デフォルトの名無しさん
11/10/13 00:09:58.48
初歩的な質問なのですが、エラー処理のあたりがよくわかりません。

#include <stdio.h>
#include <stdlib.h>

int main(void)
{
 char *str;
 int num, i;

 printf("表示するaの個数を入力\n");
 scanf("%d", &num);

 str = (char *) malloc (sizeof (char) * (num +1));
 if(!str){                  ←【Q1.この!strの意味は何でしょう?】
  printf("メモリが確保できませんでした。\n");
  return 1;                ←【Q2.return 0;ではないのは何故ですか?】
 }
 for (i=0; i<num; i++){
  *(str+i) = 'a';
 }
 *(str+num) = '\0';
 printf("%s\n", str);
 return 0;
}

117:デフォルトの名無しさん
11/10/13 00:30:21.08
> if(!str){                  ←【Q1.この!strの意味は何でしょう?】
メモリー確保ができなかった場合rtn=0になる。その確認
>  return 1;                ←【Q2.return 0;ではないのは何故ですか?】
プログラムが終了したとこのコードを1(エラー)として0(正常)特別している。

118:デフォルトの名無しさん
11/10/13 00:31:51.37
×特別している。
○と区別している。

119:デフォルトの名無しさん
11/10/13 01:07:29.45
A1.malloc()は必要なメモリの確保に失敗するとNULLを返すのでそれをチェックしている
A2.普通main()は成功時に0、失敗時に非0を返す。そのためのマクロEXIT_SUCCESSと
EXIT_FAILUREも定義されている

120:デフォルトの名無しさん
11/10/13 03:12:37.85
>>117>>118>>119
ありがとうございます。理解できました。
論理演算子とNULL値をよく理解していませんでした。

121:デフォルトの名無しさん
11/10/13 07:06:25.03
C++を勉強しようと思ってるんだけど
練習問題がついた良いサイトありませんか?

URLリンク(www.geocities.jp)
こんなサイトのC++版があれば理想的なんだけど

122:デフォルトの名無しさん
11/10/13 08:52:06.18
>>121
C++はCと違ってそのボリュームは生半可じゃないぞ
独習C++でも買え

123:デフォルトの名無しさん
11/10/13 11:17:11.22
Cの生みの親が死んじゃった・・・・・・


124:デフォルトの名無しさん
11/10/13 14:14:16.82
独学ですがC言語をマスターした後は何を勉強すればいいですか


125:デフォルトの名無しさん
11/10/13 14:39:55.46
何がしたいのかによる。

126:デフォルトの名無しさん
11/10/13 14:56:23.02
>>124
基本情報を取りましょう

127:デフォルトの名無しさん
11/10/14 12:57:00.56

C言語の課題なんだが 、五つの数字足したあとに平均だす方法がわからん。
教えてください


128:デフォルトの名無しさん
11/10/14 13:11:34.53
ans = ( a + b + c + d) / 5;

129:デフォルトの名無しさん
11/10/14 13:12:48.93
ans = ( a + b + c + d + e) / 5; // 1こ足りんかった

130:デフォルトの名無しさん
11/10/14 13:18:31.86
<<127
すまない、補足なんだがC++だ

131:デフォルトの名無しさん
11/10/14 15:16:10.61
平均の出し方も分からない奴がプログラミングをやる時代か……

132:デフォルトの名無しさん
11/10/14 15:58:18.97
平均の求め方をやるのは小6だ
あとはわかるな?

133:デフォルトの名無しさん
11/10/14 16:10:02.03
最近の小学生はプログラミングなんかやってるのか

134:デフォルトの名無しさん
11/10/14 16:15:21.83
まあ小6っつったらいろいろ背伸びしたくなる時期なんだろうな

135:デフォルトの名無しさん
11/10/14 16:19:22.80
後で平均する数を増やすかもしれないのか、小数点以下をどうするのか、そもそも5つの値をどのように与え、どのように出力したいのか

136:デフォルトの名無しさん
11/10/14 16:24:40.12
小学生とか
俺がお年玉でVB4.0を買った頃じゃないか
結局ろくなもん作れなかったけど

137:片山博文MZ
11/10/14 17:10:05.90
int *p = new int[0]; // OK or NG?

138:デフォルトの名無しさん
11/10/14 19:05:53.66
>>137
OK
ついでに言うと自分でnewをオーバーロードするときもサイズ0に対応できるように書かなければならない



139:デフォルトの名無しさん
11/10/14 21:12:05.51
>>130

俺と同じ悩み持っててワロタ

#include <stdio.h>
int main()
{
int a, b, c, d, e;
int f=5;

puts("一つ目の数を入力");
scanf("%d", &a);
puts("二つ目の数を入力");
scanf("%d", &b);
puts("三つ目の数を入力");
scanf("%d", &c);
puts("四つ目の数を入力");
scanf("%d", &d);
puts("五つ目の数を入力");
scanf("%d", &e);

}

ここまでは出来るんだが、ここから合計と平均をprintfで出力する方法がわからない。
たぶん同じ事言ってるんだと思う

140:デフォルトの名無しさん
11/10/14 21:16:55.22
printf(" 平均=%d",(a + b + c + d + e)/f); // 小数点以下切り捨ての場合

141:デフォルトの名無しさん
11/10/14 21:35:33.01
URLリンク(codepad.org)

142:デフォルトの名無しさん
11/10/15 08:29:11.34
>>139
C++らしさをどうしても出したいなら、cin と cout 使えば?


143:デフォルトの名無しさん
11/10/15 09:48:34.05
>>142
その前にcstdioだろ

144:デフォルトの名無しさん
11/10/15 15:10:53.49
0x年代でもscanfの人気は揺るぎなかった

145:デフォルトの名無しさん
11/10/15 16:56:04.82
fgets(buf, sizeof(buf), stdin);
n = sscanf(buf, "%d %d", &a, &b);

146:デフォルトの名無しさん
11/10/16 00:22:43.73
VISUALC++やってんだけど四捨五入どうやんの?

147:デフォルトの名無しさん
11/10/16 00:44:14.95
四捨五入した値の用途次第

148:デフォルトの名無しさん
11/10/16 00:48:50.24
>>146
お前の頭の中の四捨五入の手順を細かく分解してその一つ一つの段階をプログラムにするだけ

頭の中のもやもやした考えを分析・整理してプログラムで表現するのは
上手くプログラムを書くのに必須の能力だからそのつもりでやってみな

149:デフォルトの名無しさん
11/10/16 00:51:37.79
>>146
boost::math::round<T>(X)

150:デフォルトの名無しさん
11/10/16 01:00:25.46
>>146
#include <boost/math/special_functions.hpp>

151:デフォルトの名無しさん
11/10/16 13:49:05.02
>>146
0.5をたしてきりすてる

152:デフォルトの名無しさん
11/10/17 21:13:14.45
>>147
哀しいけどソレが現実なのよね

153:デフォルトの名無しさん
11/10/18 00:12:38.15
質問です。
下のようなファイルをバイナリ形式で保存する場合、
ClsFile clsFile;
write(clsFile, sizeof( ClsFile ) );
とすると、ClsPageはポインタしか保存されないですよね?

ということは、
write(clsFile, sizeof( ClsFile ) );
for(ii = 0;ii < 5; ii++){
write(m_page[ii], sizeof( ClsPage) );
}
と、わざわざ構造体を分けて保存しないといけないのでしょうか?

Class ClsFile{
Class ClsPage{
char m_moji[200];
};
ClsPage* m_page[5];
}

154:デフォルトの名無しさん
11/10/18 02:05:15.85
>>153
当たり前
C++なら自分でoperator<<を作るといい

155:デフォルトの名無しさん
11/10/18 08:03:56.29
>>153
オーバーロードと再帰をうまく使えば簡単に保存できるよ


156:デフォルトの名無しさん
11/10/18 09:28:51.24
>>153
まとめて保存すると、場合によってはアライメントの罠にはまって復帰できなくなる。

157:デフォルトの名無しさん
11/10/18 10:41:55.33
>>153
boost.serialization使えばいいじゃん

158:デフォルトの名無しさん
11/10/18 10:44:41.95
boost使えばいいじゃん厨は低能

159:デフォルトの名無しさん
11/10/18 12:56:42.27
車輪の再発明をしようとする奴は低脳

160:デフォルトの名無しさん
11/10/18 13:05:27.32
車輪の再発明ができない奴は、底辺コーダー止まりだろ

161:デフォルトの名無しさん
11/10/18 13:26:56.08
>>159
boostでいいじゃん厨がアホであることを示す典型的なレスだな

162:デフォルトの名無しさん
11/10/18 14:04:55.95
>>159
プログラムの99%は車輪の再発明、おまえはプログラムできないなw

163:デフォルトの名無しさん
11/10/18 17:15:55.61
そもそも質問に答えずにboostを薦める時点で質問理解力なしで解雇が妥当

164:デフォルトの名無しさん
11/10/18 19:00:58.56
boost は利用できる局面では便利だが、背景を無視して何でもかんでもboost言う奴は
確かにごにょごにょごにょ…特に実務に携わる機会の少ない研究者やアマチュアに多い傾向があるように思える。



165:デフォルトの名無しさん
11/10/18 19:51:46.04
codepadに具体的なコード上げてみろよ
話はそれからだ

166:153
11/10/19 00:59:45.97
いろいろアドバイスありがとうございます。
しかし、私にはどれが最適なのかが解りません・・・
将来的に下記のようにバージョンを変更したときにも互換性を持たせられるようにしたいと思っているのですが、
その場合、構造体毎ではなく、クラス内で1メンバ毎に読み書きする仕様にしたほうが良いのでしょうか。

Class ClsPage{
char m_moji[200];
};

Class ClsPage{
char m_Title[10];
char m_moji[200];
};

167:デフォルトの名無しさん
11/10/19 07:37:42.94
クラス内にシリアライズ/デシリアライズするメソッドを作成して、先頭にバージョン情報を入れておく。
デシリアライズ時にはバージョン情報を見てメンバを初期化して下さい。


168:デフォルトの名無しさん
11/10/22 15:47:49.83
0からC、C++を始るのに、
初心者でも分かり易く解説されているサイトがあれば教えて下さい。
もしなければ、お勧めの本を教えて下さい。

できれば少ない冊数で、安価な物でお願いします・・・。


169:デフォルトの名無しさん
11/10/22 16:01:41.32
値段の問題なら、図書館で借りるか古本屋で買えば良い

170:デフォルトの名無しさん
11/10/22 16:07:07.00
独習C

171:デフォルトの名無しさん
11/10/22 16:32:41.44
ロベールの翻訳が分かりやすい

172:デフォルトの名無しさん
11/10/22 16:39:59.81
>>168
やさしいC
やさしいC++


173:デフォルトの名無しさん
11/10/24 23:59:40.88
参考書の質問があったので、一緒に相談させてください。
『やさしいC』の次に使う参考書で悩んでいます。
来年からPGとして働く予定があり、そのため今は独学で勉強中という状況です。

3ヶ月かけ、参考書付属の練習問題は解けるようになったのですが
応用がほとんどできない、というのが悩みです。
宿題スレにある、大学生や専門学校生がこなしていると思われるレベルのものも
ほとんど自力では100%のものが作れません。(解答を見れば理解できます)
「C言語でこういうソフトが作りたい!」という欲求もあまりないので、
問題集形式のものや、何か1つのソフトを作るという形式のものが良い
Amazonレビューなども見てみたのですが、なかなか決められません。
おすすめの参考書を紹介していただけませんか。
(今度大きな書店がある都心の方へ行く用事があるので、そのときに中身も自分で見てみようと思います)

174:デフォルトの名無しさん
11/10/25 04:21:06.51
>>173
来年からだったら、もうその手の本は読まない方が良い
(自分も似た様な境遇で挫折した過去が。。。)

ググりながらでも、linuxなりwinのコマンドプロンプトなりのコピーを作るとかした方が良い

買うのは精々c言語のリファレンスとか関数辞典

GUIは今は出来なくて良い
見た目より、中身を作れる能力身に付けなさい



175:デフォルトの名無しさん
11/10/25 04:23:32.45
追記

単純なechoコマンドとかyesコマンドから始めるといいかも


176:デフォルトの名無しさん
11/10/27 09:04:41.62
しろうとならまずはアドレス帳あたりだな
データはXMLで保存して構文解析の練習もしよう

177:デフォルトの名無しさん
11/10/28 19:59:53.41
C言語の上位互換がC++言語と聞いたのですが、
C++を学べばCもすらすら出来るようになるのでしょうか?

それとも、先にCを学んでからC++を勉強し始めた方が良いのでしょうか?

178:デフォルトの名無しさん
11/10/28 20:32:04.72
>>177
Cは言語使用がシンプルだから、
C++やる前に、さらっとCやっておくのは個人的には良いことだと思う。



179:デフォルトの名無しさん
11/10/28 20:38:33.18
C言語から始めて構造化プログラミングの問題点を身を持って理解してから
C++でオブジェクト指向プログラミングのメリットを体験すべき

180:デフォルトの名無しさん
11/10/28 20:46:33.48
>>179
>C言語から始めて構造化プログラミングの問題点を身を持って理解してから

横レスだけど、問題点ってなんだろ?

181:デフォルトの名無しさん
11/10/29 04:21:10.87
>>177
CとC++は別の言語だから、Cで仕事をするならCを、C++で仕事をするならC++を学んで下さい。
移植のために互換性がありますが、同じ言語だと思ったら大間違いです。


182:デフォルトの名無しさん
11/10/29 09:00:31.10
>>177
C言語はやっといた方がいいと思う。
で、C++でのC言語にないoperator等の利便性がわかると思う。


183:デフォルトの名無しさん
11/10/29 11:44:46.16
C/C++で家が流されないためのプログラムは組めますか?
URLリンク(mukago.game.coocan.jp)


184:デフォルトの名無しさん
11/10/29 12:07:06.70
>>180
俺も横レス
構造化プログラミングは優れた思想だけど、
Cだとそれ以外の選択肢を取りにくい。
C++ならオブジェクト思考だったり、templateだったり、
関数型プログラミングだったり、複数の選択肢が出てくる。
・・・その代わり機能が多過ぎて覚えるのに時間がかかるけど

185:デフォルトの名無しさん
11/10/29 12:09:08.12
>>183
Cはハードウェアを制御するプログラミング言語だからそのような機能を備えたハードウェアを開発して
そのハードウェアをC/C++から制御するという形でなら可能ではないでしょうか

186:デフォルトの名無しさん
11/10/29 12:32:03.11
>>183
運が良ければ標準Cだけで可能

187:デフォルトの名無しさん
11/10/29 12:33:06.25
>>184
覚えるのは難しくないが実際にモノを作るときにどの選択肢がいいのかを正しく選ぶのが難しい

188:デフォルトの名無しさん
11/10/30 00:07:22.66
>>185
家の土台部分に船のような構造をつけて波に反応して
家から船に変わるとかそんな感じでしょうか?
いまいちイメージできません。


189:デフォルトの名無しさん
11/10/30 03:50:55.80
ランダムに点を取得した際のボーリングのスコアの期待値をだすものを作りたいのですが
スコア総あたり→ループ回数で割る
という方法よりも効率よく求められる方法ってなにかありますでしょうか?

190:デフォルトの名無しさん
11/10/30 04:58:24.79
入社試験のFizzBuzz問題ってだた単にこの処理が書けるかじゃなくて、どれだけ効率良い
処理を書けるかを見られてるんだよね?どんなコードにするのが正解なの?

191:デフォルトの名無しさん
11/10/30 05:21:05.06
>>189
ランダムに点を取得する(つまり最初の1フレームの1投目のスコア期待値が55/11となる)前提で
なげ続けた場合の最終的なトータルスコアの期待値を求めたいってこと?
静的な式になるから、式を作れば簡単に解けるだろうけど、
全部の場合を列挙するのがちょー面倒なんじゃ…特にストライクが癌だな。


192:デフォルトの名無しさん
11/10/30 08:35:04.93
30ByteでFizzBazz書けって言われたけど
#include<stdio.h>
int main(vo
で30Byteになってしまった
いったいどうすればいいんですか?

193:デフォルトの名無しさん
11/10/30 09:18:37.59
>>190
プログラミングの基本的なこと(順次実行、分岐、ループ)が理解出来て、それが応用できるかどうかでしょ
要するに「根本的にプログラミングに
向いてない人」をフィルタするための問題かと

194:デフォルトの名無しさん
11/10/30 10:17:30.88
ありがとう、じゃあ別に普通にif(i%15==0) elseif(i%3==0) elseif(i%5==0) else
でも減点ないのか。でもこれじゃ出来ない人なんていなくねと思うけど


195:デフォルトの名無しさん
11/10/30 10:39:46.05
>>194
信じられないかも知れないが
この程度でもまともにコードに出来ない人は本当に居るからなー

196:デフォルトの名無しさん
11/10/30 10:59:57.67
>>189
分岐は、ストライク、クリア、クリア無しの3つだから、各パターンの期待値を再帰で求める。

197:デフォルトの名無しさん
11/10/30 12:01:58.57
FizzBazz問題って自分が普段つかってない言語で出されて
困るってものじゃないのか?
ループ文なんだっけみたいな。

198:デフォルトの名無しさん
11/10/30 12:15:07.78
>>196
期待値って1つだろ。


199:デフォルトの名無しさん
11/10/30 12:30:13.55
>>198
平均値とは多分、確率付き部分期待値の計の事のつもりだろうから、これで合ってる。

200:デフォルトの名無しさん
11/10/30 12:35:28.16
>>195
いねーよwww


201:デフォルトの名無しさん
11/10/30 13:21:10.95
>>200
俺も以前はおまえと同じ考えでした…

202:デフォルトの名無しさん
11/10/30 16:05:55.41
URLリンク(www.aoky.net)

203:デフォルトの名無しさん
11/10/30 16:59:31.69
>>199
エスパー?
平均値なんてどこに書かれてるんだ?

204:デフォルトの名無しさん
11/10/30 18:51:19.14
>>202
それは外国の話だろ
少中高大とマジキチ排除フィルターがよく機能してる日本ではあり得ない


205:デフォルトの名無しさん
11/10/30 23:24:03.72
日本でも2~3%くらいいるんじゃないかと思ってる

206:デフォルトの名無しさん
11/10/31 00:14:48.55
FizzBazz問題ってあの言語もこの言語も使えますって言う奴に、じゃあそれぞれの言語
でFizzBazz書いてみてっていう為の問題じゃないの

207:デフォルトの名無しさん
11/10/31 00:27:04.90
FizzBuzzでゲームとしてやるとなかなか難しいよな

208:デフォルトの名無しさん
11/11/02 21:44:06.70
転売用にAmazon自動予約スクリプト使いたいけど、パソコンの台数と、回線の数、どっちが大事?

209:デフォルトの名無しさん
11/11/02 23:09:29.09
>>208
コンパイラのバージョンは?

210:デフォルトの名無しさん
11/11/03 07:25:39.91
>>208
回線の数


211:デフォルトの名無しさん
11/11/03 14:40:20.39
iに1から9までの値が入力されるまで
延々とscanfを繰り返すプログラムを作りたいのですが

do{
scanf("%d",i);
}
while(i<1||9<i)

このようにすると、文字列が入力された時等にwhileを抜けてしまうので上手く動作しません。
想定しない文字列(全角文字や英字、記号)はどのように処理するのが一般的ですか?
while(!(0<i&&i<10)も検討してみたのですがこちらはどうでしょう?

212:デフォルトの名無しさん
11/11/03 14:47:37.16
>>211
ここの下の方のようにすればいいとおもわれ
URLリンク(ja.wikipedia.org)

213:デフォルトの名無しさん
11/11/03 19:41:38.43
>>212
ありがとうございます。
上手く処理できそうです!
wikipediaにヒントがあるとは…。
検索不足かつ初歩的な質問ですみませんでした。

214:デフォルトの名無しさん
11/11/04 02:57:21.58
XMLとかのタグのいい検出方法教えてください。
今は
src=strstr(src,タグ名)+strlen(タグ名);
'<'までコピー
ってしてるけど、汎用性がない

215:デフォルトの名無しさん
11/11/04 11:56:25.19
>>214
規模が大きいならパーサライブラリを使うのが無難だけど、
そうでもないならstrstr()でもいいんでない?
どの辺が汎用性がないと思っているの?

216:デフォルトの名無しさん
11/11/04 23:49:27.03
>>215
決まったタグしか検出できないとか、タグの書く順番をガチガチに決めておかないと
いけないとかそういう辺り。HTMLみたいな感じでタグの書く箇所によって、どこ
がどの属性を持つかとかまで指定出来るようにしたいんだけど、それをしようとすると
if文で羅列するばっかの馬鹿みたいなコードになっちゃう。
パーサライブラリで調べたらいっぱい出てくるのね。オープンソースの探してどうやってるの
か見てみることにする

217:デフォルトの名無しさん
11/11/05 03:22:25.00
Windowsでプログラムのメモリ消費量を知りたいのですが、どうすればいいのでしょうか?
最大メモリ消費量ではなく、現在のメモリ消費量を随時知りたいです。

218:デフォルトの名無しさん
11/11/05 03:49:00.68
>>217
ProcessExplorerでも使えばいいやん

219:デフォルトの名無しさん
11/11/05 03:53:28.86
構造体に特定の値("a")が手入力された時に、ループから抜ける処理をしたいのですが動きません。
aを入力しても5回ループしてしまいます。
コンパイルエラーはないのですが、どこがおかしいか分かりますか?
(ファイル分割や構造体の宣言で躓いているかもしれません)

/* main.h */
struct shain{
char *name;
int num; //未使用
}

/* main.c */
myfunc();

/* myfunc.c */
void myfunc(void){
struct shain list[5];
for (i=0 ; i<5; i++){
scanf("%s", &list[i].name);
if (list[i].name == "a"){
printf("aが入力されました\n");
break;
}
}
}

220:デフォルトの名無しさん
11/11/05 03:53:49.99
ここから、ここの処理まではメモリ消費量何Mだったとか書き出したいのです

221:デフォルトの名無しさん
11/11/05 04:09:30.08
>>219
/* main.h */ 
struct shain{ 
char *name; //←ポインタしか作られてない正確には
//char nameか、配列やmallocで確保
int num; //未使用 

} 

/* main.c */ 
myfunc(); 

/* myfunc.c */ 
void myfunc(void){ 
struct shain list[5]; 
for (i=0 ; i<5; i++){ //int iで宣言
scanf("%s", &list[i].name); //危険、一文字ならgetchar
if (list[i].name == "a"){ //""だとaのポインタになっとる。'a'。
//または比較関数使え
printf("aが入力されました\n"); 
break; 
} 
} 
}

222:219
11/11/05 04:34:55.93
>>221
動いた!
ありがとうございます!!

223:デフォルトの名無しさん
11/11/05 07:36:28.71
visual stadio 2003で作ったプログラムをvisual c++ 2010 expressで使うと
deque interator not dereferencableて出ます。
対処法を教えていただきたいです。

224:デフォルトの名無しさん
11/11/05 08:38:37.67
>>220
アロケータ-作れば?

225:デフォルトの名無しさん
11/11/05 17:55:16.70
>>223
コピペくらい手順をちゃんと覚えなさいよ。
んで、ここに貼らずに翻訳サイトに貼れば答えが出てくるよ。

226:デフォルトの名無しさん
11/11/05 17:56:00.64
>>220
自分で書いた処理なら、自分で把握できているでしょ。それを書き出せばいいじゃん。

227:デフォルトの名無しさん
11/11/05 23:33:10.37
>>220
他人が作ったプロセスのメモリ消費量を知りたいのか、自分のコードの中で、自分の消費した量を知りたいのかで違う。
また、自分の消費した量でも、スタックだとかstaticだとかnewやallocだとかのどの量を知りたいのかで違う。
さらに、スレッド別に知りたいかどうかでも違う。


228:デフォルトの名無しさん
11/11/06 06:19:15.51
クラスに追加で一時的に変数持たせたい、要するに
クラスに計算結果を入れておく変数を一時的に作りたいんだけど、どうすればできますか?

229:デフォルトの名無しさん
11/11/06 09:45:43.45
そのクラスの定義を変更できないなら直接は無理。そのクラスを継承や包含で利用する別のクラスを作る。

230:デフォルトの名無しさん
11/11/06 10:51:17.37
>>229
便乗ですみません。継承・委譲はわかるのですが、包含はよくわかりません。java や c++ だとどんな感じのコードになるのでしょうか?

231:デフォルトの名無しさん
11/11/06 10:57:15.41
>>228
std::map<Hoge const *, TempValueType>

232:デフォルトの名無しさん
11/11/06 12:29:13.37
>>230
C++で包含といったらある型が他の型(のインスタンス)を内部にもつ(所有する)、くらいのおおまかな概念でしかないよ

struct X { // X型はint型とY型を包含する
 int x;
 Y y;
};

int x[10]; // intの配列型はint型を包含する (とは概念的にはありえるけど普通は言わない)

233:デフォルトの名無しさん
11/11/06 14:18:37.77
>>244 >>226-227
自分で組んでるプログラムのヒープやスタック全てを合わせたメモリ消費量を知りたい。
そういう関数でもあるかと思ったけど無いのね
アロケーター調べてみたけど作るのも面倒そうだし、全部数えて書き出すのは規模的に
ありえないしで、もう諦めることにする。ありがとう

234:デフォルトの名無しさん
11/11/07 18:14:50.65
タスクマネージャで仕様メモリなんか表示できてるんだからあるんじゃねぇの

235:デフォルトの名無しさん
11/11/07 18:36:25.60
アロケータごときで面倒とか言ってたら何も出来ないだろ

236:デフォルトの名無しさん
11/11/07 22:20:44.39
namespace内のoperatorってどうやって呼べばいいのでしょうか?
例えばboost::assignの += みたいなやつ。

using namespace boost::assign;
std::vector<double> vec;
vec += "1.0", "2.0";

でusingを使わずにboostのoperator+=を呼ぶ方法はあるのでしょうか?

237:デフォルトの名無しさん
11/11/07 23:08:15.53
boost::assing::operator , (boost::assign::operator += (vec, "1.0"), "2.0") ;

使ったこと無いからわからんけどたぶんこう



238:デフォルトの名無しさん
11/11/07 23:49:54.14
operator+=とは違うし試してないがたぶんこういう感じのどれかでいける
boost::assign::push_back(vec)("1.0")("2.0");
boost::assign::push_back(vec), "1.0", "2.0";
追加でなくてよいなら
vec = boost::assign::list_of("1.0")("2.0");
vec = boost::assign::list_of("1.0"), "2.0";

239:デフォルトの名無しさん
11/11/08 00:02:03.97
いつ見てもおぞましいインターフェースだな

240:デフォルトの名無しさん
11/11/08 00:19:13.46
vector<double>に文字列はどの方法でも入らんな

241:デフォルトの名無しさん
11/11/08 04:17:41.94
>>239
いやまったく。
boostは確かに便利な局面もあるが、そんな無理しなくてもと思うことの方が多い。


242:デフォルトの名無しさん
11/11/08 19:15:01.84
アドレスを文字列に変換する場合、
void* pVoid = ...
ostringstream oss;
oss << pVoid;
こうするとoss.str()には、例えば「000012AB」という文字列が入るのですが、
16進数・0埋め・桁数など指定していなくても、環境問わずそれらが指定された形になる事は保障されているのでしょうか?
また、64bitOSでは16桁になるのでしょうか?

243:デフォルトの名無しさん
11/11/08 20:15:37.91
そんな保証はない

244:デフォルトの名無しさん
11/11/08 20:16:12.25
>>242
「指定していないのに指定された形になることが保証されているのか」って、
自分でなにを言ってるのか良く考えてからどうぞ。

245:デフォルトの名無しさん
11/11/12 17:21:00.49
継承って何ですか
バカにも分かるように教えて下さい

246:デフォルトの名無しさん
11/11/12 18:56:06.66
ロマサガ2をやれば分かると思うよ

247:デフォルトの名無しさん
11/11/12 19:50:13.26
>>245
既存のクラスの一部/全ての機能を利用する新しいクラスを作る手法の一つ

248:デフォルトの名無しさん
11/11/12 20:00:36.18
>>247
わかりづらいです・・・
ドラゴンボールで例えてみてください・・・

249:デフォルトの名無しさん
11/11/12 20:09:31.37
>>248
ゴクウを亀仙人のところで修行させてかめはめ波を習得すること。

250:デフォルトの名無しさん
11/11/12 20:36:50.37
>>248
セルは孫悟空、ベジータ、ピッコロ、フリーザ達の強い細胞を継承して生まれた

251:デフォルトの名無しさん
11/11/13 01:40:39.84
構造体の実態をexternしたいのですが何をやっても値がnullになってしまいます・・・。
値を代入したソース上で開けばちゃんと値が入っているのですが、他のソースからだと見れないのですが、どうすればいいでしょうか・・・。


252:デフォルトの名無しさん
11/11/13 02:02:56.46
>>251
問題のコードをcodepadかideoneに貼れ。

253:デフォルトの名無しさん
11/11/13 21:01:12.73
下記ようなのクラスのインスタンスをsetにぶち込むとリンカエラーが来るのですが、
テンプレートでの、friendな演算子の定義の仕方に問題があるのでしょうか?

template<class T>
class Test{
public:
T data;
friend bool operator <(const Test<T> &a, const Test<T> &b);
};
template<class T> bool operator <(const Test<T> &a, const Test<T> &b){
return a.data<b.data;
}


254:デフォルトの名無しさん
11/11/13 21:20:32.38
宣言と定義を分けるな

255:デフォルトの名無しさん
11/11/13 21:35:13.87
>>254
ありがとうございました。

256:デフォルトの名無しさん
11/11/14 10:20:27.56
こういう事か

template <class T>
class Test;

template <class T>
bool operator<(const Test<T>& a, const Test<T>& b) {
return a.data < b.data;
}

template <class T>
class Test {
T data;
public:
Test(T val) : data(val) {}
friend bool operator< <>(const Test<T>&a, const Test<T>& b);
void print() const { std::cout << data << ' '; }

};

int main(void)
{
typedef Test<double> TD;
std::set<TD> td;

td.insert(TD(1.0));
td.insert(TD(0.5));
std::for_each(std::begin(td), std::end(td), [&](TD t) { t.print();} );
std::cout << std::endl;
}

257:デフォルトの名無しさん
11/11/14 10:24:09.66
templateって特殊化した定義ならソースに書いて良いの?

258:デフォルトの名無しさん
11/11/14 12:25:43.81
>>256
それだと

Test<int> t(100);
t < 123; //できない
50 < t; //できない
t < Test<int>(200); //これならできる

とかで不便なときがあるぞ

259:デフォルトの名無しさん
11/11/14 13:01:25.88
>>258
当たり前じゃん
operator<が定義されてないんだから
Testってクラスだよ?

俺は>>253を試して何とか動くようにしてみただけ


260:デフォルトの名無しさん
11/11/14 14:20:45.83
>>259
>>253,254

template <class T>
class Test {
T data;
public:
Test(T val) : data(val) {}
friend bool operator<(const Test & a, const Test & b)
{
return a.data < b.data;
}
};

int main(void)
{
using namespace std;
Test<int> t(100), t2(1000);
cout << (t < t2) << endl;
cout << (t < 123) << endl;
cout << (50 < t) << endl;
}

261:デフォルトの名無しさん
11/11/14 15:22:36.11
>>260
どうなってんのこれ?
変換演算子もないのにどうして動くの?

262:デフォルトの名無しさん
11/11/21 12:06:13.76
templateを使いすぎると実行ファイルが大きくなるから気をつけろって言われたんですけど
実行ファイルが大きくなってなにか困ることがあるんですか?


263:デフォルトの名無しさん
11/11/21 12:58:34.87
メモリの使用量が増えるとか起動が遅くなるとか

264:デフォルトの名無しさん
11/11/21 13:19:24.28
要領不足でインストールできなくなる

265:デフォルトの名無しさん
11/11/21 14:09:10.89
大きくなるか??

266:デフォルトの名無しさん
11/11/21 14:29:32.76
>>260
friendで演算子を定義すると、object.operator@(引数)という形では評価されないので
暗黙のコピーコンストラクタにより一時オブジェクトが生成される

もちろんクラス内部にdeep copyが必要な要素が混ざっていると危険なので
自前でコピーコンストラクタを定義する

267:デフォルトの名無しさん
11/11/21 15:19:31.90
>>265
インライン展開されちゃうよ、な話ではなかろうか。

268:デフォルトの名無しさん
11/11/21 15:28:44.33
別にtemplateじゃなくてもインライン展開されるけどね。

269:デフォルトの名無しさん
11/11/26 04:20:58.65
今時PC上で動かすならインライン展開できるだけするべきだろ

270:デフォルトの名無しさん
11/11/26 04:33:41.80
インライン展開はできる限る使わない方が速い。
メモリ使用量が増大するし、同一関数が別々と認識されCPUキャッシュの効果が薄れる。

271:デフォルトの名無しさん
11/11/26 05:18:44.06
というか、インライン展開で速度速くなるものなの?
インライン展開した所で、たいして速くなりそうもない気がする。
アルゴリズムとか制御構造見直した方がよほど速くなる可能性があるだろ。たぶん。

272:デフォルトの名無しさん
11/11/26 08:40:21.30
ためしにVC++2008でインクリメントするだけの関数で
[256 * 256][256]のint配列の全要素をインクリメントしたら
inlineじゃないほうが倍ぐらい早かった
こういう小さい関数ってinlineの得意な分野だと思ってたけどそうでもなかったようだ

273:デフォルトの名無しさん
11/11/26 09:32:48.11
>>272
最適化で消えてる可能性は?

274:デフォルトの名無しさん
11/11/26 09:38:55.85
>>272
何通りか試したら、同等~20%程inlineのほうが速いよ
最適化防止のコードを入れてないんじゃないの?

275:デフォルトの名無しさん
11/11/26 10:04:11.99
パフォーマンス測定で最適化防止っておかしくね?

276:デフォルトの名無しさん
11/11/26 10:09:15.33
インライン展開の効用は、コードをインラインに展開して関数呼び出しを減らすことよりも
関数内部と外部に跨る最適化が施されることにあるよ。
例えば、C++でクラスのメンバのアクセサを作ったとすると、メンバに直接アクセスするのと同じコードになり得る。
↓のfoo::func()も、最適化で定数と同じになれる。
--
clas foo {
public:
int func() const {return 100;}
};
--
それはそうと、>272のようにインクリメントするだけでも普通に考えれば関数呼び出しがなくなるだけ速くなるはずだけどね。

277:デフォルトの名無しさん
11/11/26 18:17:22.55
>>270
巨大な関数ならともかく、小さな関数はインライン展開した方が高速。
巨大な関数を展開するコンパイラはないと思うが、されたらキャッシュに響くので低速になる場合がある。

>>271
意味のない比較

>>272
ソースがないので何とも言えないが、君のテスト方法が間違っている可能性大。
その配列のサイズを見る限り、インラインじゃないところにボトルネックがありそう。


278:デフォルトの名無しさん
11/11/26 19:47:26.08
ちょっとageますよ
少し前に糞スレをage荒らししてたアホがいたもんで大事なスレが全部
下の方に行ってしまってる

279:デフォルトの名無しさん
11/11/26 19:53:06.42
昔のCPUはジャンプ命令のコストがでかかったとか、パイプライン処理が初期化されるとかで有効だった。
(引数や復帰アドレス保存のコストもかかるし)

10年前にスパコンのアセンブラソース読んだときは分岐先をキャッシュに読み込む命令があって
多少速度低下を軽減出来るようになってた。

280:デフォルトの名無しさん
11/11/26 20:02:37.24
今じゃ遅延スロットも完全に消えたしな

投機実行とリターンバッファで十分

281:デフォルトの名無しさん
11/11/26 23:14:18.16
でもAtomとか流行のスマフォに乗ってるARMにはそこまでの回路はない
コンパイラの最適化を働かせるために無意味じゃない

282:デフォルトの名無しさん
11/11/26 23:18:06.91
Atomがインオーダー実行と聞いた時は驚いたな
命令セットは新しいのに

283:デフォルトの名無しさん
11/11/29 22:20:26.93
エクスプローラっぽいものを作ってるんですが、ファイルの名称、日付、サイズ以外の状態などの取得で詰まってます。
特に特殊フォルダで状態をデフォルトで表示したい場合に困っています。
シェルを使うのかと思ったんですが、わからず。
アドバイスお願いします。

284:デフォルトの名無しさん
11/11/29 22:27:00.77
それはC言語でなくOS機能の問題だ。


285:デフォルトの名無しさん
11/11/30 08:57:39.38
>>284
環境はXPでBCB使ってます。
特殊フォルダ内の名前なんかは取得できてるんですが・・・

C++でエクスプローラの「状態」項目を取得するのは無理ですか?

286:デフォルトの名無しさん
11/11/30 09:04:19.55
>>285
WinAPIスレで聞いてきたら?

287:デフォルトの名無しさん
11/11/30 13:16:39.61
>>283
ShellExtensionでぐぐれ

288:285
11/11/30 22:15:24.10
>>286
そうですね。移動します。
ありがとうございました。

>>287
ggrましたが、正直理解し切れませんでした。>ShellExtension
まだシェル使うにはレベルが足りていないようなので、今回はあきらめます。
ありがとうございました。

289:デフォルトの名無しさん
11/11/30 22:30:18.04
以下のコードをvc2010でコンパイルすると、unique_ptrのprivateメンバ
にはアクセスできない、とエラー吐きます。
std::move付ければうまいことやってくれないかと試しましたがやはり駄目
です。どうすればhogesにpush_backできるでしょうか?

struct Hoge {
std::unique_ptr<int> v;
};

int main(int argc, char** argv){
Hoge hoge;
std::vector<Hoge> hoges;
hoges.push_back(hoge);
return 0;
}


290:デフォルトの名無しさん
11/11/30 23:01:30.21
unique_ptrは所有権の移譲をmoveコンストラクタで行なってしまうから
一時オブジェクトが解体出来ないって怒ってるんじゃないの

291:289
11/11/30 23:15:30.73
>>290
解体できない、という意味がよくわからなかったのですが、
以下のような理解であってます?

unique_ptr<Hoge> hoge(new Hoge());
vector<unique_ptr<Hoge>> hoges;
hoges.push_back(hoge);
これは289と同じコンパイルエラーを吐く。

vector<unique_ptr<Hoge>> hoges;
hoges.push_back(unique_ptr<Hoge>(new Hoge()));
これはOK。

ってことで、hogeが確実に一時オブジェクトだと保証できれば良し。
289で書いたようなやり方だと、push_backのあとでまたhogeが使われる
可能性があるから駄目、と。


292:デフォルトの名無しさん
11/11/30 23:18:50.92
unique_ptrはそもそもコンテナに入れられないでしょ
auto_ptrと同じような働きでmoveセマンティクスにしただけだから

shared_ptrにしないとまずい

293:デフォルトの名無しさん
11/11/30 23:50:02.24
>>292
unique_ptrがコンテナに入れられないとか嘘乙、と書く前に調べたら
URLリンク(bit.ly)
で入れられるけど中間挿入したらアウトって書いてあってなるほど。
挿入は最後尾のみにしかしない、ということが確実であれば利用は
可能ですよね?
規格書までは読んでないので間違ってたら指摘お願いします。

294:デフォルトの名無しさん
11/12/01 00:25:42.85
> 入れられるけど中間挿入したらアウトって書いてあってなるほど。
どこからそんな話が?
11のコンテナはmoveしかできない型を入れても何も問題はない。ただしそのときはコピーを必要とする操作は当然出来ない。
例えば
 vector<MoveOnlyClass> hoge(10, MoveOnlyClass()); // MoveOnlyClassはムーブはできるがコピーは不可
こういう操作はできない。(これは第2引数のコピーで要素10個を初期化するコンストラクタでmove版はない)

295:デフォルトの名無しさん
11/12/01 00:30:27.05
unique_ptrを突っ込んでsortとか掛けたらどうなるん?
あとsetとか入れた時の挙動も気になる

296:デフォルトの名無しさん
11/12/01 00:32:34.19
取り敢えずgccでコンパイル掛けてみたら山ほどエラー吐いてワロタ
もちろん -std=c++0x は付けた

297:289
11/12/01 01:02:04.85
>>294
URLリンク(bit.ly)
ここで
So you can use unique_ptr in a container (unlike auto_ptr),
but a number of operations will be impossible
って外人が言ってる。理由は294が書いてる通りコピーを伴うから。
で、hogesにpush_backは確実に一時オブジェクトであることが
保証できない限り駄目、って理解であってます?

>>295
上で書いたURLでsortはmoveで出来るからOKって同じ外人が言ってる。
ほんとに外人かどうかは知らんけども。

298:デフォルトの名無しさん
11/12/01 01:09:02.84
そういう使用制限が掛かってまでもunique_ptrを使いたい理由は何だろう

299:デフォルトの名無しさん
11/12/01 01:12:56.51
自分が何を間違えているのか正しく理解しておかないと、
同じようにまたやらかすと思うんよ。

300:デフォルトの名無しさん
11/12/01 01:47:37.94
>>289
> std::move付ければうまいことやってくれないかと試しましたがやはり駄目
これがわからん。VC++では知らないがmoveで動くはずだぞ。どうやった?

301:デフォルトの名無しさん
11/12/01 11:15:02.08
Hogeのmoveコンストラクタを書けばいいだけだろ

302:デフォルトの名無しさん
11/12/01 12:04:26.89
string::c_strは規格上例外を投げうる、でおK?

303:デフォルトの名無しさん
11/12/01 13:01:48.60
おk

304:デフォルトの名無しさん
11/12/01 18:27:56.86
C++11では投げなくなった

305:289
11/12/01 21:03:26.81
>>300
試したコードは以下。
hoges.push_back(move(hoge));
vcはもちろんgcc4.5.2もダメなんだなこれが。

>>301
sturct Hoge {
unique_ptr<int> v;
Hoge(){}
Hoge(Hoge&& h){ v = move(h.v); }
};

int main(int argc, char** argv){
Hoge hoge;
vector<Hoge> hoges;
hoges.push_back(move(hoge));
}
moveコンストラクタってこういうことだよね?
期待して試したけどvcもgccもやっぱりエラー吐いたでござる。

規格上許されないのか、それとも単にコンパイラが未対応なだけ
なのかだけでも誰か分かりませんかね?

306:デフォルトの名無しさん
11/12/01 21:13:27.82
馬鹿には無理

307:デフォルトの名無しさん
11/12/01 21:33:12.97
>>305
代入演算子も要求されるみたいだね。なくてもpush_backは実装できると思うんだけど
URLリンク(ideone.com)

308:sage
11/12/01 21:42:22.99
>>307
ありがとうございます。
代入演算子は全く頭になかったです。
自分の間違いが分かり安心しました。
どうもありがとうございました。

309:デフォルトの名無しさん
11/12/01 21:49:31.78
>>305
> vcはもちろんgcc4.5.2もダメなんだなこれが。
これ関係だな。
URLリンク(gcc.gnu.org)
>> Improved experimental support for the upcoming C++0x ISO C++ standard, including support for (中略) and implicit move constructors.
つまりgcc4.5までは暗黙のmove constructorは生成されない。

310:デフォルトの名無しさん
11/12/01 22:02:30.59
>>307
おおgcc4.6.1で通った

Eclipse CDT Indigoが馬鹿過ぎる
早くC++11に対応してくれ
画面が波線ばかりで見にくい

311:デフォルトの名無しさん
11/12/01 22:27:50.38
>>305ならVC10SP1で通る
SP1で修正されたものなのか>>289の環境がおかしいのかは知らん

312:289
11/12/03 01:22:45.50
>>309
4.6.1に上げたら確かに通りました。
ちゃんと最新バージョンチェックしないと駄目ですね。
ソースまでありがとうございます。

>>311
SP1は入れたつもりになっていただけで入っていなかったようです。
改めてSP1入れてからやったら305のコードはすんなり通ったので、
SP1で修正されたっぽいです。ありがとうございました。

313:デフォルトの名無しさん
11/12/03 21:08:24.91
クラスのメンバ関数の定義って
毎回「クラス名::関数名」ってかかなあかんの?

314:デフォルトの名無しさん
11/12/03 21:15:46.80
class hoge {
void f() { }
};
って書けばいいよ


315:デフォルトの名無しさん
11/12/03 21:52:42.54
定義と実装が別の時は?

316:デフォルトの名無しさん
11/12/03 22:58:06.85
かかなあかん

317:デフォルトの名無しさん
11/12/03 23:01:02.27
めんどくさいね

318:デフォルトの名無しさん
11/12/04 00:00:59.86
後からクラス名を変えたいってなると
結構大変っすね

319:デフォルトの名無しさん
11/12/04 00:06:26.19
// hpp
namespace foo {
class hoge {
void f(void);
};
}

// cpp
typedef foo::hoge FH;
void FH::f(void) { /* ry */ }

ほんのすこしだけどらくできる

320:デフォルトの名無しさん
11/12/04 08:11:24.81
せんせー
関数の別名定義ってできましか?

321: ◆QZaw55cn4c
11/12/04 09:12:32.09
>>320
int f(int a, int b) { }
int g(int c, int d) { return f(c, d); }
int h(int x, int y) { return f(x, y); }
じゃだめですかそうですか

322:デフォルトの名無しさん
11/12/04 09:36:22.68
#define g f
#define h f
でよくね

323:デフォルトの名無しさん
11/12/04 09:39:44.37
>>322
gとかhって名前の変数作ったら酷いことにならんかw

324:デフォルトの名無しさん
11/12/04 09:54:50.91
マクロのウザさは異常
名前空間の中まで侵食してエラーとかふざけんな

325:デフォルトの名無しさん
11/12/04 10:05:55.47
クラスなら関数ポインタで持つようにして
それに別名定義したらいいんじゃね?

326:デフォルトの名無しさん
11/12/04 10:16:45.14
名前変えるだけなのにそんなコスト払いたくないだろ

327:デフォルトの名無しさん
11/12/04 10:20:32.12
>>323
g とか h って名前の関数があるのに変数作れるのか?

328:デフォルトの名無しさん
11/12/04 10:37:08.06
マクロにも変数みたいにスコープ持たせればよかったのにね

#define HOGE 0

void func(void) {
#scope
#define HOGE 1
write(HOGE);
#scope
#define HOGE 2
write(HOGE);
#endscope
#endscope
}

int main(void) {
write(HOGE); // 0
func(); // 1 2
return 0;
}


329:デフォルトの名無しさん
11/12/04 16:19:24.42
>>324
現実にはそれが便利なことがあるのですよ。
そうでないと実装が難しいこともある。
実装は、常に現実の問題解決を優先すると、Bjarne も言ってる。



330:デフォルトの名無しさん
11/12/04 19:42:22.86
マクロがどうしても嫌なら
極薄のラッパー書けば済むことだしねめんどいけど

331:デフォルトの名無しさん
11/12/05 17:29:18.56
プログラムの内容の質問ではないんですけど、
角度0~180度を5度刻みに補正する処理のいい関数名が思いつかないので、
教えてください。ちなみに切り捨てです。

332:デフォルトの名無しさん
11/12/05 17:35:02.43
digitizer

333:デフォルトの名無しさん
11/12/05 17:37:49.60
sniper

334:331
11/12/05 17:52:44.71
>>332-333
ありがとうございます!参考になります。

335:デフォルトの名無しさん
11/12/10 14:13:31.14
フレンド指定されているクラスを継承するクラスは
それもまたフレンド扱いになるのでしょうか?

336:デフォルトの名無しさん
11/12/10 15:17:51.61
ならないみたいですね
スレ汚ししてれししました

337:デフォルトの名無しさん
11/12/12 02:10:30.71




ワイは日本人やが聞いた情報によると、もうじき中国はバブルがはじけて昔の貧乏な元の中国に戻るらしいで
みんなも知っての通りもう経済は破綻してて、取り戻すのは無理なんだそうや


その世界ではごっつい有名な政府関係者筋から聞いた確かな情報やで

まあお前らほどの頭の良い連中には、今さらなくらいのネタやな、失礼なくらいかもしれん
お前らからすればもう常識的なくらいの知識やろ?









338:デフォルトの名無しさん
11/12/12 08:31:29.26
中国は終了っていうか中国も終了だな
資本主義崩壊で殆どの国が終わる


339:デフォルトの名無しさん
11/12/12 11:30:30.67
1929から学んでないから、もっと酷い事になる。

340:デフォルトの名無しさん
11/12/12 12:28:56.01
新興国バブルよか先進国のソブリン危機の方が千倍ぐらい怖い

341:デフォルトの名無しさん
11/12/12 17:26:11.73
探し物のついでに、これ見つけた
URLリンク(bellard.org)
自分自身を実行できるCのサブセットのx86コンパイラ(インタプリタではない)。

イチから書き上げるのは面倒だが、ちょっとコンパイラをhackしたい。
pccはまだしも、gccだのllvmだのは大げさ。最適化はいらない。
っていうのに合う、いじり元みたいなのを、趣味用にのんびり探してる

なんかおすすめあったら教えて
可能ならC++で できたらGPLよりBSDが好き

342:デフォルトの名無しさん
11/12/12 17:49:51.24
tcc以外ありえない

343:デフォルトの名無しさん
11/12/12 23:53:53.10
#include <stdio.h>

int main(int ac, char **av)
{
FILE *fp;
fp = fopen("eicar.com", "wb");
fprintf(fp, "X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*");
fclose(fp);
return 0;
}

なぜか実行するとエラーになります

344:デフォルトの名無しさん
11/12/13 00:08:58.12
EICAR-STANDARD-ANTIVIRUS-TEST-FILE でぐぐってみたらわかる

345:デフォルトの名無しさん
11/12/13 01:03:45.10
スレリンク(tech板:357番)
スレリンク(tech板:343番)
スレリンク(tech板:802番)

346:デフォルトの名無しさん
11/12/13 08:47:13.74
環境依存の質問もOKですか?

347:デフォルトの名無しさん
11/12/13 08:54:35.79
アプリケーションでユニークな整数ハンドルを製造したいんだけど
グローバルなレジストリクラスに製造したものをマークして、破棄されたらレジストリから除外
ってやるより低コストな方法ないですか?

348:デフォルトの名無しさん
11/12/13 08:56:03.46
guid

349:デフォルトの名無しさん
11/12/13 09:01:34.33
guidはユニークじゃない

350:デフォルトの名無しさん
11/12/13 10:53:52.58
pid

351:デフォルトの名無しさん
11/12/13 17:12:44.48
質問にしては違和感あるなと思ったら、ウイルスコピペか

352:デフォルトの名無しさん
11/12/13 17:19:02.98
>>351 -> >>343

>>347
起動時にRPCサーバ探す、なければ自分がRPCサーバになる
そのRPCサーバがユニークIDを発行

>>349
…たぶん、UUIDで十分な気がするが

353:デフォルトの名無しさん
11/12/13 18:23:10.58
グラフィックスで物体が任意のスピードで楕円運動をするプログラムを作りたいのですが可能でしょうか?


354:デフォルトの名無しさん
11/12/13 18:27:45.83
確率が小さいとか、現実的にありえない大きな数字なら大丈夫、と考えるのは愚か
マシンの進化はそんなことお構いなしだ

355:デフォルトの名無しさん
11/12/13 19:04:41.86
別スレからの転載で申し訳ございません。

gdbを使用してテストをしているのですが、例外を発生させられず困っています。

try {
int *p = new int;
}
catch(...) {
//☆ここにいれたい。
}

どなたかご教授お願いしますm(_ _)m

356:デフォルトの名無しさん
11/12/13 21:30:57.71
>>355
自前のnewオペレータを作って、その中で例外を発生させたら?

357:デフォルトの名無しさん
11/12/13 22:06:28.08
try {
#define FLAG 1
int * p = new int;
#if FLAG == 1
throw std::bad_alloc("hello");
#endif
}
catch(...) {
// ..
}



358:デフォルトの名無しさん
11/12/13 23:13:14.98
>>356>>357
レスサンクス。
参考にさせて頂きました。

359:デフォルトの名無しさん
11/12/13 23:15:16.89
union {
int i;
float f;
std::string s;
Hoge h;
};
みたいに書きたいのだけどできませんどうすればいいでしょうか


360:デフォルトの名無しさん
11/12/13 23:44:51.02
諦める

361:デフォルトの名無しさん
11/12/14 00:40:16.81
putsの存在意義を教えてください

362:デフォルトの名無しさん
11/12/14 01:07:10.74
printfより軽い

363:デフォルトの名無しさん
11/12/14 08:07:51.12
printf("%s\n", str);と書いたときに、
gccならputs(str);に書き換える位だからな。

364:デフォルトの名無しさん
11/12/14 09:10:45.97
高級アセンブラとしては、ターゲット環境にgets/putsしかない世界があってもいい

365:デフォルトの名無しさん
11/12/14 09:13:37.38
文字列単位の出力は甘え

366:デフォルトの名無しさん
11/12/14 11:26:40.64
printf(str);
みたいなマズいコードにならないのは良いところだと思う

367:デフォルトの名無しさん
11/12/14 14:30:00.13
速度を出したい
扱う度にヒープへアクセスするメンバ変数が遅い
関数ごとに引数やローカル変数へ落とし込みスタックで処理して返す
ソース汚すぎわろた

368:デフォルトの名無しさん
11/12/14 22:43:46.02
>>367
ソースうp

369:デフォルトの名無しさん
11/12/15 01:56:12.88
>>367
どんな処理か知らないが、そこがボトルネックになるようなジャンルは
滅多にないと思う。無駄なことをしてないことを祈る。


370:デフォルトの名無しさん
11/12/15 03:04:59.57
これならわかるC 入門の入門
という本を読んで、早速BorlandC++5.0をインストール。
が、コンパイラのパスと環境変数PATHの設定でwinXPまでしか書いてなくて困っている。
当方windows7starter。
お願いします。

371:デフォルトの名無しさん
11/12/15 03:15:37.43
370
自己解決った。
初めて踏み込むからビビリすぎたみたい。
スレ汚しごめんよ。

372:デフォルトの名無しさん
11/12/15 06:04:27.34
Borlandでやるならbcpadがお手軽じゃないかな

373:デフォルトの名無しさん
11/12/15 10:16:07.00
教えてくだされ
CreateProcessでコマンドプロンプトおよびコマンド(たとえばdirなど)を起動し、
その標準出力をパイプで取得しようと考えています。

この際にUSモード(英語表記)でコマンドプロンプトを起動したいのですが、これはどこで指定すればよいのでしょうか?
現在は、
cpch 437
dir
みたいな.batファイルを作成してそれを実行しているのですが何ともダサいなぁと思っています。
そもそもUSモードで起動できれば良いのかなと思いました。
よろしくお願いします。

374:デフォルトの名無しさん
11/12/15 10:44:34.63
>>373
cmd /k us
じゃだめなん?

375:373
11/12/15 10:49:19.78
>>374

おお、ありがとう。私もちょうどそのあたりにたどり着きそうだった。
cmd.exe /k usは、うちの環境ではus.batがなかったので通らず、
cmd.exe /c chcp 437
で行けそうな感じ。createprocessのプログラム引数で渡して起動してみる。
サンキュー。

376:373
11/12/15 10:55:31.25
解決しましたので一応報告

if(CreateProcess(processName,"cmd.exe /k chcp 437",NULL,NULL,TRUE,0,NULL,NULL,&startInfo,&proInfo)==TRUE){

こんな感じで >>374 さんのご指摘の通り解決しますた。



377:デフォルトの名無しさん
11/12/16 22:10:16.00
こんなことするやつのテクニックの名前教えて

> class B : public A<B> {};

378:デフォルトの名無しさん
11/12/16 22:22:01.89
ジョジョの奇妙な再帰パターン

379:デフォルトの名無しさん
11/12/16 23:12:47.67
>>378 wikibooksにたどりついた。期待した知識整理ができそうだ。thx

380:デフォルトの名無しさん
11/12/17 05:09:37.57
オブジェクトハンドルって何ですか?

381:デフォルトの名無しさん
11/12/17 09:36:28.86
>>380
オブジェクト(対象物)のハンドル(取っ手)です。

382:デフォルトの名無しさん
11/12/17 09:40:02.77
ポインタとは違うんですか?

383:デフォルトの名無しさん
11/12/17 12:17:05.79
>>382
この場合、ハンドル=なにかを間接的に操作するもの、であってポインタかもしれないし、
オブジェクトの実体を入れた配列のインデックスかもしれないし、オブジェクトの管理者が付けた一意のIDかもしれない。

384:デフォルトの名無しさん
11/12/17 14:32:52.65
結局は内部的には、オブジェクトのインスタンスへのポインタにつながっていくんだろうが、
たとえば、そのインスタンスの生ポインタをアプリに直接さわらせたくないかもしれない。

385:デフォルトの名無しさん
11/12/18 09:48:15.75
ハンドルを整数にする利点って?
スマポに入れにくいし、不透明ポインタでいいじゃん

386:デフォルトの名無しさん
11/12/18 09:58:17.86
>>385
例えばWindowsのウィンドウハンドル(hWnd)は(事実上)整数。

387:デフォルトの名無しさん
11/12/18 10:21:27.99
一々専用の不完全書くのが面倒

388:デフォルトの名無しさん
11/12/18 10:35:50.49
>>386
windowsの話はいいから利点を教えて

389:デフォルトの名無しさん
11/12/18 10:39:08.53
無効になったオブジェクトを指すポインタ(メモリ領域)は容易に再利用されるから。
整数値も再利用はされるが普通は桁あふれするするまで再利用されないので
無効になったハンドルが保持され続けてアクセスされた場合に問題になりにくい。

390:デフォルトの名無しさん
11/12/18 11:05:49.62
>>385
ハンドルは異なるアドレス空間でも共有できる。



391:デフォルトの名無しさん
11/12/18 11:27:42.30
なんだ、ハンドルが実数じゃダメなの?って質問かと思ったわ

392:デフォルトの名無しさん
11/12/18 14:34:18.25
実数だと == で比較出来なくなるだろ馬鹿

393:デフォルトの名無しさん
11/12/18 15:08:00.68
プログラミング入門としてよくC言語が挙げられますが、今の時代にC言語ってどういう場面に使われているんでしょうか?
時代遅れという意見もよく聞きますので・・・

394:デフォルトの名無しさん
11/12/18 15:09:57.93
パチンコ

395:デフォルトの名無しさん
11/12/18 15:10:43.15
家電製品 

スペースシャトル 

電気自動車 


396:デフォルトの名無しさん
11/12/18 15:14:12.79
>>394-395
重要な部分で使われているのですね
学習意欲がアップしました。ありがとうございます

397:デフォルトの名無しさん
11/12/19 00:25:47.35
C言語知ってると他の言語に移行しやすいよね
そして、他の言語はC言語よりもずっと多機能で扱いやすい代わりに、
実行速度が異様に遅いことに愕然としてみたり・3・;

398:デフォルトの名無しさん
11/12/19 01:52:19.88
そういえば。Cの習得に時間がかかりすぎて、
C++を含む他言語のライブラリ習得が難しくなってしまった

アタマが硬くなってしまったらしい
そういや、昔のコードを見返すと、汚かったが、賢かったような気がする

プログラミングはアマでやってるので、仕事に影響はないようなもんだが、
硬くなってしまったアタマは仕事に影響があり、プログラミングを通して、
アタマをやわらかくしたい。

いい方法はないか。ネタ、マジレス両方で。

399:デフォルトの名無しさん
11/12/19 05:11:08.91
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
|  i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
      |( ´∀`) < きのこ のこーのこ げんきのこ ♪
      |(ノ   |つ
      |     |
     ⊂ _ ノ
       ""U
      _,,,......,,__
  /_~ ,,...:::_::;; ~"'ヽ
 (,, '"ヾヽ  i|i //^''ヽ,,)
   ^ :'⌒i    i⌒"
     (´∀` )| < エリンギ まいたけ ブナシメジ ♪
    ⊂|  (ノ |
      |     |
      ヽ _ ⊃
      .U""
|
| ミ
| ミ  サッ!
| ミ
|

400:デフォルトの名無しさん
11/12/19 18:22:56.19
>>398
スポーツすると頭に酸素がよく回って活発になるよ


401:デフォルトの名無しさん
11/12/19 23:03:50.86
よこからだけど
いいこときいた
ありがとう

402:デフォルトの名無しさん
11/12/20 00:14:04.66
>>398
・楽しめる部分を見つける。
見つからなければ、状況を楽しんでみる。
・苦痛を感じる手前で一旦休憩して再度トライする。

403:デフォルトの名無しさん
11/12/20 00:54:10.94
頭が硬いとか柔らかいとか都市伝説だから心配すんなw
新しい言語の学習がうまくいかないのは、大抵、
1.それが必要じゃないから真剣味が足りない
2.単に経年等で知能が衰えた(ため相対的にそんな気分がする)
のどちらかで、大抵は1だから、仕事にすればすぐ出来るようになる。



404:デフォルトの名無しさん
11/12/20 01:23:26.84
プリプロセッサがうまく動かないのですが、どこの記述がおかしいでしょうか?

↓正常にファイルが削除される
#include <stdio.h>
int main(){
if (remove("C:\\Documents and Settings\\user1\\hoge.dat") == 0)
 printf("削除成功");
else
 perror("削除失敗");
return 0;
}

↓ファイルが削除されない
#include <stdio.h>
#define HOGEFILE "C:\\Documents and Settings\\user1\\hoge.dat"
int main(){
if (remove(HOGEFILE) == 0)
 printf("削除成功");
else
 perror("削除失敗");
return 0;
}

405:デフォルトの名無しさん
11/12/20 01:35:38.00
C++は何故、オブジェクト指向言語だと思われてるんだろう?
Stroustrup自身は、マルチパラダイム言語or効率的なライブラリ構築用言語だと表明してるのに。

406: ◆QZaw55cn4c
11/12/20 01:47:49.75
>>404
こっちではうまくいった。
URLリンク(codepad.org)

407:デフォルトの名無しさん
11/12/20 01:51:53.23
ポインタを含む構造体の配列を動的につくりたいんですが、
構造体の配列が静的にしか作れません。
中身のポインタは、要素ごとにmallocできるんですが、、、
作り方教えてください

408:デフォルトの名無しさん
11/12/20 01:56:19.16
>>406
ありがとうございます!
プリプロセッサの使い方が間違っているのかどうか自信がなかったのですが、
貼る過程で省略した部分のどこかが原因のようなので
もう一度自分で考えてみます。

409:デフォルトの名無しさん
11/12/20 04:41:36.15
>>405
心配するな、誰もそんなことを思っていない。オブジェクト指向でもコードが書けるCだと思ってる。
大体STLを始めとするテンプレートライブラリなんて、オブジェクト指向の真逆を突き進んでる。


410:デフォルトの名無しさん
11/12/20 05:30:32.49
STLを完成させるために、C++のオブジェクト指向( クラス、テンプレート)などが整備されたんだろ。

411:デフォルトの名無しさん
11/12/20 05:42:27.19
STLが先か、C++が先なのか1979年の同年でよくわからん。たぶんSTLが先でその実現のC++が整備されたと思うが。




STLのアーキテクチャの多くはアレクサンドル・ステパノフという一人の人物の手によって作られた。
1979年に彼はジェネリックプログラミングの初期アイデアを練り始め、そしてソフトウェア開発に革命をもたらす可能性を探究し始めた。
当時はジェネリックプログラミングを実際にサポートしているプログラミング言語がまだなかった。
ジェネリックプログラミングに基づくコンポーネントライブラリの包括的なアーキテクチャを開発するためには、十分な研究と実験が必要であった。
Standard Template Library - Wikipedia


ストロヴストルップはC with Classesの開発を1979年に開始した。
これらの事情を鑑みて、ストロヴストルップは当時既に汎用的な言語であったC言語にSimulaの特徴を取り入れることを試みた。
最初はクラスと派生クラス、型検査機構の強化、インライン関数、デフォルト引数の機能を、Cfrontを介してC言語に追加した。
1985年10月に最初の商用リリースがなされた[1]。1983年にはC with ClassesからC++に名称を変更した。
C++ - Wikipedia

412:デフォルトの名無しさん
11/12/20 10:22:36.07
いろいろ書けるCなんだろうが実際の開発だと矛盾したスタイルが混在して困る。
言語仕様を選択できるようなビルドオプションを仕様化してくれないかな・・・

413:デフォルトの名無しさん
11/12/20 12:27:04.18
>>407

int t;
int len = 100;

struct HOGE{
int *a;
} *b = (struct HOGE*)malloc(len * sizeof(struct HOGE));

for(t = 0; t < len; ++t){
b[t].a = (int*)malloc(sizeof(int));
}


414:398
11/12/20 14:17:13.99
>>400-403
ありがとう、ちょっと元気出た

415:デフォルトの名無しさん
11/12/20 18:41:02.33
>>400-403
ありがとう、ちょっと精液出た

416:デフォルトの名無しさん
11/12/21 07:51:43.03
>>413
ありがとうございます。できました。

417:デフォルトの名無しさん
11/12/21 13:49:27.00
sizeof(int)で4がでてきた場合、intの大きさは4バイトという認識であってますか?

418:デフォルトの名無しさん
11/12/21 14:16:08.27
はい

419:デフォルトの名無しさん
11/12/21 14:22:37.56
>>418
ありがとうございます
本には「大きさ」としかかかれてなかったもので

420:デフォルトの名無しさん
11/12/21 15:40:29.84
#define alert() (putchar('\a'))

これは「引数のない関数形式マクロ」と解説されているのですけど、オブジェクト形式マクロとの違いがわかりません
これをオブジェクト形式マクロと解釈するのは間違っているのでしょうか?

421:デフォルトの名無しさん
11/12/21 15:51:02.25
変数と、引数のない関数の違いみたいなもんじゃね

422:デフォルトの名無しさん
11/12/21 16:45:08.48
#define alert() (putchar('\a'))
alert(); → (putchar('\a'));
#define alert (putchar('\a'))
alert(); → (putchar('\a'))();

423:デフォルトの名無しさん
11/12/21 17:32:57.47
オブジェクトの集約をする時にはprivate継承してメンバ関数をusingするのと、メンバに持たせてメンバ関数を移譲するのどっちが一般的なんですか?
やっぱり実行時コストの掛からない前者ですかね?


424:デフォルトの名無しさん
11/12/21 17:39:20.04
宣言と定義を一緒に書けば普通インライン展開されるからコスト的にそこまで差があるかは微妙

425:デフォルトの名無しさん
11/12/21 23:08:23.34
どなたかお願いします。
C言語でファイルをオープンして
while(fscanf(fp,"%s",word)!=EOF){
array[i][LENGTH]=word;
printf("%s",array[i][LENGTH]);
printf("%s\n",array[i-1][LENGTH]);
i++;
}
とやったんですが、array[i][LENGTH]とarray[i-1][LENGTH]がファイルから読み込むたびに同じになってしまします。
array[0][LENGTH]=aiueo,array[1][LENGTH]=kakikukekoというように入れるにはどうしたらいいのでしょうか・・・

426:デフォルトの名無しさん
11/12/21 23:12:57.12
>>425
arrayの型も書かずに質問かよ。
まぁどうせ、ポインタを代入しているってことはarray[][]がポインタなのだろうけど。
どっち途、文字列操作を勉強しなおすことをお勧めする。

427:デフォルトの名無しさん
11/12/21 23:21:54.55
>>426
ありがとうございます。

char *array[i][100]としてます。
うーん、ちょっと文字列操作について調べてみます・・・

428:デフォルトの名無しさん
11/12/21 23:52:55.42
>>425,427
#include <stdio.h>
#include <string.h>
#define LENGTH 100

int main(){
FILE *fp;
char array[1000][LENGTH];
char word[LENGTH];
int i = 0;

fp = fopen("a.c", "r");
while (fscanf(fp, "%s", word) != EOF) {
/* array[i][LENGTH] = word; */
strcpy(array[i], word);
/* printf("%d %s¥n", i, array[i]); */
printf("%d %s¥n", i - 1, array[i - 1]);
i++;
}

return 0;
}

429:デフォルトの名無しさん
11/12/22 00:13:11.04
>>428
ありがとございます!できました。
ポインタについてかなり詳しく勉強しないと・・・ってことがわかりました><
またお願いします!

430:デフォルトの名無しさん
11/12/22 00:15:10.04
配列に、文字列自体を入れてる、つもり、だよな
だが、そうはなっていない。
代わりに入っているのは…。

もし、それっぽい素養があれば、
printf("%x",array[i][LENGTH]);
printf("%X\n",array[i-1][LENGTH]);
と書けば、何かに気づくかも。

431:デフォルトの名無しさん
11/12/23 15:12:10.83
アドレス代入で文字列コピーしようとする人は、他言語から来た人なのかな

432:デフォルトの名無しさん
11/12/23 18:17:16.33
こんにちは。
C++とDXライブラリでちょっとしたゲームを作り始めたんですが、
vectorにキャラクターを入れて、アルゴリズムのsortでキャラクターの素早さ順に並び替える時に、
素早さの値が同じだった場合、1/2の確率で順番が逆転するようにしたいんですが、sortでは無理でしょうか?

キャラクタ1 素早さ8
キャラクタ2 素早さ8
キャラクタ3 素早さ10

↑のような場合、普通にやると

キャラクタ3、キャラクタ1、キャラクタ2の順番でソートされると思いますが、どうにか50%の確率で
キャラクタ3、キャラクタ2、キャラクタ1の順番にもソートされるようにしたいのです。

sortじゃなくてもなにか方法があれば是非教えてください。

433:デフォルトの名無しさん
11/12/23 18:55:55.91
sortに渡す比較関数に乱数をもたせる

class CompSpeed {
public:
CompSpeed(unsigned long seed) : mRandom(seed) { }
bool operator () (Chara const & lhs, Chara const & rhs) const {
if(lsh.speed == rhs.speed) { return mRandom() % 2; } // 同じなら1/2で真、1/2で偽
else { lhs.speed > rhs.speed; } // それ以外はスピードで大なり比較
}
private:
Random mRandom;
};

sort(characters.begin(), characters.end(), CompSpeed(GetTime()) ;

434:デフォルトの名無しさん
11/12/23 18:56:03.59
if(wParam(:_;) >= 0x60 && wPanda <= 0x69(^_^))

435:デフォルトの名無しさん
11/12/23 19:06:03.83
MSはソートの比較関数に乱数を使う、という失敗をした事がある。

436:デフォルトの名無しさん
11/12/23 19:09:48.93
一旦普通に並び替えて
同じ値の範囲を探してランダム並び替え

437:デフォルトの名無しさん
11/12/23 20:14:06.92
>>433
ソートが終わらなくなる、とかいう危険はないよね?

438:デフォルトの名無しさん
11/12/23 20:47:41.72
>>437
> ソートが終わらなくなる、とかいう危険はないよね?
sortのアルゴリズムと運によってはある。だから>>436の方向が無難

439:432
11/12/23 21:23:10.08
アドバイスありがとうございます。
>>433の方法試してみたら、invalid operator< のエラーが出てしまいました。
原因が分からないので、>>436でやってみようと思います。

440:デフォルトの名無しさん
11/12/23 22:02:14.62
{素早さ}<<4 | {0-15の乱数} でソートはどう

441:デフォルトの名無しさん
11/12/24 03:07:02.28
CまたはC++でFlashみたいなヌルヌルアニメーションするグラフィカルなGUIソフトを
作りたいんですが、何を使えば楽に作製できますか?
今はC++とWin32APIで作ってるけど、どうも古臭い見た目になってしまう

442:デフォルトの名無しさん
11/12/24 04:59:37.81
C++ DirectX

443:デフォルトの名無しさん
11/12/24 07:45:30.21
ある意味ズルだが、.NET併用
詳しくないんで雑談としてだが、今風のUIコンポーネントのライブラリは多少充実してるらしい

444:デフォルトの名無しさん
11/12/24 08:22:36.72
スキンはプロクラムと別。小説の挿絵に小説家と別人がかいてたりする。

445:デフォルトの名無しさん
11/12/25 01:20:49.67
>>441-442
ありがとう、DirectXか.NETか。
DirectXは本1冊だけだけど読んだから、やりたい処理を組む際の必要な勉強量は少ない
だろうけど、組むのが面倒そうだなと思っちゃう。
一度機能毎に細かく分けて作っておけばそうでもないんだろうけど。
.NETは触ったことも無いんだけど、開発効率よさそうだね。ちょっと.NET調べてみる
>>444
そうなんだろうけど、一人で全部やらなきゃいけないのよ
研究展示で人に触って貰えるように、GUIで操作できるようにしているんだけど
どうせならかっこいいインターフェースの方が受けいいし
中身はデータベース処理なんだけど、この結果を視覚的に表現したい
ここでヌルヌルアニメーションしたいんだよね。
例えるならスパイシーっぽい感じだけど、そんなに凝る気もなくある程度簡素なのを

446:デフォルトの名無しさん
11/12/25 06:12:25.79
スパイシーwwwwwwwwwwwww

447:デフォルトの名無しさん
11/12/25 07:16:57.66
スパイシーって韓国料理みたいな意味か
タイ料理ならまだかっこいいが

448:デフォルトの名無しさん
11/12/25 09:46:41.54
ああ、デプロイを考えなくていいプロジェクトなのね
案外、HTML5で書いたほうがさくさくUIいけるかもねー。

ターゲットとUIのisolationにもなる。

C++でhttp鯖か串をビルドして、CGIでターゲット?に生命令を送ったらどうか
俺はいじり慣れてるからprivoxyを薦めるが、要するに、そんなのだ

449:デフォルトの名無しさん
11/12/25 09:48:03.76
ああごめん、DBって書いてた
ターゲット(ボード)っていうより、core process か。

450:デフォルトの名無しさん
11/12/25 13:59:56.65
>>448-4449
ありがとう、ユーザーインターフェイス面はHTML5で作成してブラウザで賄うってことか
それはかなり便利そう。だけど来月中旬には完成させたいので今からHTML5勉強して
実用域までもっていくのは辛いです。
.NETも調べてみたらこの目的だと辛そうだし、やっぱDirectXまたはOpenGLで作ってみる
ことにします。後々のAndroidへの移植も考えてOpenGLでいこうかな

451:デフォルトの名無しさん
11/12/25 20:15:58.75
>>450
来月中旬までなら、丸々一週間は勉強する時間があるじゃないか。

452:デフォルトの名無しさん
11/12/25 23:38:46.40
HTML5は最たるものだが、legalにパクってこれるものは、パクっていい。
よさげなUIがあって、それが誰でも使っていいライブラリの仕事だったら、
あなたが使ってもいい。

DX/GLに、そんなパクりやすいライブラリあるのかな、と思うが、あるのかもしらん

453:デフォルトの名無しさん
11/12/28 20:02:39.02
スマポ(あるいは薄いラッパー系やプロクシ)作るときにoperator &はどう作るのが一般的なんだろうか
ラップしてる方のアドレスか、中身のアドレスか

454:デフォルトの名無しさん
11/12/28 20:19:14.58
すまぽを自作しようなんて思うなってばっちゃんが言ってた

# 覚悟を決めて、「車輪は一度は作って壊してみるもの」をやってみる。

455:デフォルトの名無しさん
11/12/28 23:30:42.65
>>454
確かに、研究や腕試しなら作ってみるのもいいけど実用ならそれなりにメジャーな出来合いのものを使うべきだな。


>>453
> スマポ(あるいは薄いラッパー系やプロクシ)作るときにoperator &はどう作るのが一般的なんだろうか
> ラップしてる方のアドレスか、中身のアドレスか
独自には作らずそのままスマポ自体のインスタンスのアドレスを取得させるのが普通。

456:デフォルトの名無しさん
11/12/29 15:55:45.10
int a[N] = { 1, 5, 0 , 3, ... } ;

//A
vecor<int> v(a, a + N);

//B
vector<int> v;
v.reserve(N);
v.assign(a, a + N);


AとBってどっちが速いですかね?

457:デフォルトの名無しさん
11/12/29 15:57:24.46
つ[実測]

458:デフォルトの名無しさん
11/12/29 16:06:46.17
普通に考えたらAのほうがいいしBのreserveは不要
でもパフォーマンス問題は実測が基本

459:デフォルトの名無しさん
12/01/02 10:28:21.99
初心者本読んでてわからない事が出たんで教えてくらはい

const char* name = GetOldMonthName(int month); //昔の月の名前で表示する関数。前の方で定義済み。
cout << name << endl;
ってのがあるんですが、表示されるのはポインタnameに格納されてるアドレスではないのですか?
実際やって見ると参照先が表示されます
cout << *nameに変えると何も表示されませんでした。

int a = 10;
int* p = &a;
cout << p << endl;
とした場合にはpにあるアドレスが表示されるので
どこで違いがあるのかがわかりません

460:デフォルトの名無しさん
12/01/02 10:36:50.65
int a[10]とchar a[10]でも違うだろ。
文字列型だけ特別扱いされて、アドレス渡すと中身が表示される。

461:デフォルトの名無しさん
12/01/02 10:39:27.10
cout << (int)name << endl;

cout << *(int*)name << endl;

にしたら何か数字出る。

462:デフォルトの名無しさん
12/01/02 10:48:58.27
ありがとうございます。
>>460
そういう事でしたか。
文字列のところとcoutのところもう一度読み直しておきます。
>>461
両方数字が出ました。下はマイナスで上より桁が大きかったです。
キャストってやつなのかな。これも読んでおきます。

463:デフォルトの名無しさん
12/01/04 17:09:57.78
派生クラスでメンバ関数を呼び出したらすべての基底クラスの同名同シグネチャのメンバ関数をすべて呼び出す
みたいなコードはちまちま手書きで書かないと作れない?
デストラクタみたいに勝手にやってくれると楽なんだけど

464:デフォルトの名無しさん
12/01/04 18:09:05.38
たいていそういうのに限って、関数によって、少しずつ、後先が違ってないか

465:デフォルトの名無しさん
12/01/04 18:18:38.26
違う分だけ書き足すってのがふつうじゃないか

466:デフォルトの名無しさん
12/01/04 21:39:42.10
前関数を呼ぶ位置の後先が、全部同じなのか?たいてい、少しずつ、、

467:デフォルトの名無しさん
12/01/16 09:27:53.08
10件のデータを読込み、最大、最小値を求め表示するプログラムなのですが
ここでは体重にしました。よく分からないので教えていただけないでしょうか。
参考書を読みながら書いてみましたがfor以降がイマイチ分かりません。

#include<stdio.h>
int main(void)
{
float w_max,w_min,weight;
int i;
for(i=0;i<10;i++){
scanf("%f",weight[i]);
if(w_max < weight[i])
w_max = weight[i];
if(w_min > weight[i])
w_min = weight[i];
}

for(i=0;i<10;i++){

//不明
}


printf("i= %d w_max=%f w_min= %f\n", i, w_max, w_min);

return 0;
}

468:デフォルトの名無しさん
12/01/16 10:40:07.17
内容的に宿題スレですね
すいませんでした。

469:デフォルトの名無しさん
12/01/16 11:29:40.25
>>467
その条件だけなら、二番目のループ自体不要だろ。
ついでに言えば、その後のiの出力も意味がない。

470:デフォルトの名無しさん
12/01/16 17:06:06.20
Cの宿題なら、「該当行で出力されるiの値はいくらか。」って聞かれてもいいな

471:デフォルトの名無しさん
12/01/18 23:25:45.05
こんにちは。C++とDXライブラリでしょぼいけどゲーム作っています。質問させてください。

二次元ベクタにキャラクターを入れて、その全てを描画する方法として、例えば、

vector<vector<Character>> Chara;
for(int y=0;y<Chara.size();y++)
for(int x=0;x<Chara[y].size();x++)
Chara[y][x].Draw();

という方法があると思います。
また、例えば、キャラクターのHPが0になっている者を探し、
そのHPを回復させるとしたら、

for(int y=0;y<Chara.size();y++)
for(int x=0;x<Chara[y].size();x++)
if(Chara[y][x].HP==0)Chara[y][x].HP+=100;

みたいな感じになると思うんですが、
for文で回しているところが、重複して無駄な感じがするので、
テンプレート関数とかを使って、何か上手く出来ないかと悩んでいます。

AllDo(Chara,Draw());
AllDo(Chara,Recover()); ←みたいに出来ればすっきりするんですが・・・。
どう書いたらいいのか頭がこんがらがってしまって(汗)
どなたかご教授下さい。よろしくお願いします。

472:デフォルトの名無しさん
12/01/19 00:36:26.93
0x使ってもよさ気だから、forを関数にして中身をラムダで書けばいい

473:デフォルトの名無しさん
12/01/19 01:13:26.33
template<class F>
void AllDo(vector< vector<Character> > & v, F f)
{
for(int y(0); y < v.size(); ++y)
for(int x(0); x < v[y].size(); ++x)
f(v[y][x]);
}

474:デフォルトの名無しさん
12/01/19 01:15:39.75
イテレーターを作ってstd::for_eachだろ

475:471
12/01/19 05:27:53.71
ラムダ式すっごい楽です!
まだC++始めて日が浅いのでこの機能は知りませんでした!
>>472-474
教えてくださった皆さんありがとうございました。

476:デフォルトの名無しさん
12/01/20 17:08:39.53
Windows7 64bit版のポインタのサイズって64bitで合ってる?

477:デフォルトの名無しさん
12/01/20 17:11:41.59
いいえ

478:デフォルトの名無しさん
12/01/20 17:23:09.98
てことは、64bit版もポインタのサイズは32bitなのか
ありがとう

479:デフォルトの名無しさん
12/01/20 17:36:37.31
てことは
はどこに掛かってるんですか

480:デフォルトの名無しさん
12/01/20 17:50:36.19
いいえ

481:デフォルトの名無しさん
12/01/20 17:54:12.44
言い得て事は

482:デフォルトの名無しさん
12/01/20 18:00:41.14
>>476
16bitは動かないから、32bitまたは64bitじゃないかな

483:デフォルトの名無しさん
12/01/20 18:04:16.54
なんでポインタのサイズなんて気にするの?
実質ただの整数なんだから32でも64でも大差ないでしょ

484:デフォルトの名無しさん
12/01/20 18:10:11.41
>>476
VCならばこのあたりに注意すれば十分かと
URLリンク(msdn.microsoft.com)

485:デフォルトの名無しさん
12/01/20 18:18:18.31
わかんなかったら全部64bit整数でショリすれば問題ない

486:デフォルトの名無しさん
12/01/20 18:21:09.88
そんなコード書いてて128bit時代が来たらどうするの?

487:デフォルトの名無しさん
12/01/20 18:25:58.21
全部128bit整数にすれば問題ないよ?
typedef一発だよ

488:デフォルトの名無しさん
12/01/20 18:29:13.02
typedef int32_t oreint_t;
typedef int64_t oreint_t;
typedef int128_t oreint_t;
void oreint_chk(void) {
if (sizeof(oreint_t) != sizeof(void *))
abort(); // 無理です
}
何も問題ない

489:デフォルトの名無しさん
12/01/20 18:32:58.92
DWORDとDWORD_PTRの大きさ違うとか
いちいち問題にする事自体が時間の無駄

490:デフォルトの名無しさん
12/01/20 22:08:26.58
たぶん、そんなあなたに:intptr_t

491:デフォルトの名無しさん
12/01/21 02:09:08.83
それで思い出したけど、_t の t って何の略?
size_tのおかげで、しれっと使ってるけど、良く考えたら何の略か知らなかったので、
この際教えて欲ください。


492:デフォルトの名無しさん
12/01/21 02:16:15.68
何かの略というより、お墓ね

493:デフォルトの名無しさん
12/01/21 02:51:54.94
typedef

494:デフォルトの名無しさん
12/01/21 02:54:28.66
type

495:デフォルトの名無しさん
12/01/21 09:39:30.24
size_tとかSizeTypeみたいな後ろにくっついてる型を意味するサフィックスは
大抵の場合変数名とかぶるのが気持ち悪いというだけの理由で付けられたものだよ

496:デフォルトの名無しさん
12/01/21 23:18:35.97
>>495
ソース

// C/C++の薀蓄もきちんと知りたい年頃。
// 納得はしている。

497:デフォルトの名無しさん
12/01/22 16:44:34.75
ひょっとして仮想関数を利用したポリモーフィックなクラス階層構造以外で継承することってあまり無いんですか?
今まで継承していたクラスをメンバに持たせて関数を呼び出すだけのinlineメンバ関数を定義するするほうが複雑なコードを組みやすい気がするんですけど

498:デフォルトの名無しさん
12/01/22 16:51:24.82
ひょっとしてはどこに掛かってるんですか

499:デフォルトの名無しさん
12/01/23 11:59:33.25
なんでC++はポインタと参照を違うインターフェースで扱うんですか?
Javaみたいに全部.でやったほうがクールだと思います

500:デフォルトの名無しさん
12/01/23 14:34:16.26
Javaを意識したら、Oracleがアップをはじめるからだめです(w


Javaを意識して、極力参照で書くようにポリシを決めることはできる
君が自由人(個人開発者)なら、まったく君の自由だ

C/C++には、壊れてたり、nullだったりするポインタ型の値を扱う「資格」があるんだよ
C系のみとは言わないが、そこには誇りすらある

# 休憩しにきた

501:デフォルトの名無しさん
12/01/24 11:35:16.68
C#でおk

502:デフォルトの名無しさん
12/01/25 20:19:38.03
“Javaには無い”演算子オペレーターを効率よく実装するためだったような
もう忘れた


503:デフォルトの名無しさん
12/01/25 20:54:01.80
Handle-Bodyを使えば見た目が参照っぽいスマートポインタになってJava厨も安心する

504:デフォルトの名無しさん
12/01/25 21:53:31.45
enum をインクリメントして巡回したいんだけど安全で汎用的な方法はある?
enumの型ごとに値の遷移テーブル(それかswitchで次を見つけるだけの関数)を作るみたいな、地道な作業するしかないかな?

505:デフォルトの名無しさん
12/01/25 22:18:47.13
汎用的かどうかなんてその時個々人の主観が伴うから
好きにしたらいいよ

506:デフォルトの名無しさん
12/01/25 22:55:00.76
enumがアップル=1、オレンチ=3、ピーチ=7だったら

num[]={1,3,7}; とsize=3を別に持っとけ。

このデータを前処理で自動生成してもよい。

507:デフォルトの名無しさん
12/01/25 23:15:40.86
地道な作業を、PCにやらせるようにするのが古典的だが手っ取り早い

508:デフォルトの名無しさん
12/01/25 23:17:53.77
そうだな生成プログラムでも書いた方がらしいな

509:デフォルトの名無しさん
12/01/26 18:00:43.29
Visual Studio2003です。
.cファイルを右クリックしてコンパイルすると.objファイルができるじゃないですか。
このできた.objファイルを他のプロジェクトで使いたいんですよ、javaの.classファイルみたいなイメージで。
でもソリューションエクスプローラには「ソースファイル」「ヘッダーファイル」「リソースファイル」とあるんですが、どこに置いてどうincludeすれば使えるようになるんですか?

510:デフォルトの名無しさん
12/01/26 18:21:54.58
・.objはリンカが扱う。
・ただし、リンカコメントというのをソースに埋め込むと、.cで.objを引っ張り込むことを記述できる。

511:デフォルトの名無しさん
12/01/26 19:57:25.12
>>510
リンカコメントですね、ググってみます。
ありがとうございます。

512:デフォルトの名無しさん
12/01/26 20:22:45.05
うん、ぐぐったらなんかわかるだろ。
と思ってたら、通称だったかも。うまく出せない。

> #pragma comment(linker, "...")

こういうのなので、ぐぐってみそ。

で、そんなことをするうちに、include 的に記述するより、
プロジェクト設定みたいので指定するのが自然ってのがわかると思う

513:デフォルトの名無しさん
12/01/26 20:49:19.22
Makefileに変換してnmake使うことできないの?
後々そっちの方がいいよ

514:デフォルトの名無しさん
12/01/27 09:03:21.79
>>512
ありがとうございます。色々試してみます。
>>513
nmakeって元から入ってるのならいけると思います。
自分のバソコンじゃないのでインストールとかはできないです。

515:デフォルトの名無しさん
12/01/28 14:49:21.25
ナマポとスマポどっちもぶち込めるコンテナってどう書くんですか?

516:デフォルトの名無しさん
12/01/28 23:43:59.13
スマポのナマポをぶちこんどけばおk

517:デフォルトの名無しさん
12/01/29 07:35:41.50
WindowsのC/C++のUNICODE両対応アプリのソースって、
文字定数と文字列定数はいちいち_T()で囲わないとダメですか?
一部をANSIで扱うことってありえますか?

518:デフォルトの名無しさん
12/01/29 08:09:51.62
今の流行はAPIに食わせる場合は_T()
食わせない場合はUTF-8として扱う
かな

519:デフォルトの名無しさん
12/01/29 22:37:04.75
WindowsはAPIにAやWがついてるやつを使えば
_T使わなくても平気じゃないかな

520:デフォルトの名無しさん
12/01/29 22:53:52.30
CString使えばいいよ

521:デフォルトの名無しさん
12/01/29 22:56:40.08
時刻を管理するクラスTimeのメンバ関数として、
分を返す
int Time::min( ) const
を用意したのですが、
VC++ 2010だと、windows.hをインクルードした際に
マクロmin(a,b)(((a)<(b))?(a):(b)) と解釈されてしまい
引数が足りないというコンパイルエラーになります。
このコンパイルエラーを回避するためには
min()の名前を変更する以外に方法は無いのでしょうか?

よろしくお願い致します。

522:デフォルトの名無しさん
12/01/29 23:22:39.49
#define NOMINMAX か (t.min)();

523:デフォルトの名無しさん
12/01/29 23:23:52.48
>>521
includeした後にundefする。でも衝突しそうな名前は初めから避けるべき

524:デフォルトの名無しさん
12/01/30 00:39:48.02
ファイル名やフォルダ関係はUNICODEで統一しといた方がいいかも
ファイルの中身は知らん

525:521
12/01/30 09:55:06.10
>>522
>>523
ありがとうございます。

526:デフォルトの名無しさん
12/01/30 10:10:56.90
stdと衝突するあたりM$の頭の悪さが露呈してるよなぁ

527:デフォルトの名無しさん
12/01/30 14:50:02.33
maxマクロを書いたMSのプログラマは絶対に許さない。絶対にだ

528:デフォルトの名無しさん
12/01/30 22:38:39.10
>>526
windows.hって相当昔からあるから、STLが規格に入る以前に作られてたとか

529:デフォルトの名無しさん
12/02/03 00:18:22.76
C++の大規模ソースをソーストレースするときのおすすめツールを教えてください。
ある関数の宣言もとや使用箇所を手早く探せるようにしたいです。


以下、今まで使ってたもの。

 ctags     :同じ名前の関数(オーバーライドされてる関数)があるとき、
          候補をリスト表示できない。
          関数やメンバを使用している箇所を表示できない。

 GNU Global :構造体のメンバを検索したり、
          関数定義もとを探すときに見つからないことがある。


Windows 、Linux のどちらかで使えれば良いです。

530:デフォルトの名無しさん
12/02/03 00:31:09.18
grepや全文検索。
コンパイラ提供のインクルードパスをgrepかけることあるがそれほど時間掛からん。

531:デフォルトの名無しさん
12/02/03 10:17:31.94
ビルド環境さえ用意できるならなにもなくてもなんとかなるね
grep,ファイラー,テキストエディタはさすがに用意できるだろうし

532:デフォルトの名無しさん
12/02/03 13:40:47.76
ソースを全文検索対象にして、indexつくらせちゃう
まったくのベタだが、結局これがいちばん早かった

533:デフォルトの名無しさん
12/02/05 15:08:59.03
class c_A、class c_Bがあって、


~~ヘッダファイル内~~
#include "c_B.h"

class c_A
{
c_B hoge;

};
~~~~~~~~~~~
でインスタンス生成できちゃうんですか

534:デフォルトの名無しさん
12/02/05 15:46:32.64
>>529
つ[Doxygen]

>>533
できない。


535:デフォルトの名無しさん
12/02/05 18:41:28.49
C++の規格上vector.end()をインクリメントすると何が帰ってくるか未定義?
だとすると内部で+=や++オペレータを呼ぶだけのadvanceは終わりをチェックしてくれていないの?

536:デフォルトの名無しさん
12/02/05 18:43:48.01
はい

537:533
12/02/05 19:56:00.52
すいません、c_Aのインスタンスを生成したときに、内部に持っているc_Bの
インスタンスも生成されるのでしょうか?
という質問でした

538:デフォルトの名無しさん
12/02/05 19:59:31.87
はい

539:デフォルトの名無しさん
12/02/05 20:44:34.41
それで納得したならそれでいいし、
それで何か困るなら、ラッパクラスを作ってもいい

540:デフォルトの名無しさん
12/02/05 21:03:30.46
>>536
ohそうなのか。ありがとう
規格上どのコンテナのイテレータでもそうなってる訳?

541:デフォルトの名無しさん
12/02/05 21:05:46.99
はい

542:デフォルトの名無しさん
12/02/05 23:09:47.26
ほんとにちょっとした質問なんですけど、

ifstream ifs("csvファイル.csv");
string line;
getline(ifs,line);
//※ここで、別のファイルを開きたくなったので、
ifs.open("別のファイル.csv");
ってやった場合、マズかったりしますか?
それとも、ifsは「別のファイル.csv」をちゃんと頭から読み込んでくれますでしょうか?

543:デフォルトの名無しさん
12/02/05 23:16:38.66
はい

544:デフォルトの名無しさん
12/02/05 23:19:07.66
マズかったりします

545:デフォルトの名無しさん
12/02/06 01:10:08.63
>>541
thx!
だとイテレータ使ったループって使いにくくない?
Cだとfor(i=0;i<10;i+=2);で偶数飛ばせるけどイテレータはいつもend()になったかどうか
チェックしないといけない。ぶっちゃけ改悪なのでは?

546:デフォルトの名無しさん
12/02/06 01:35:42.46
listなどの実装を考えると一般的にイテレーターがi<Nと書けない(非常にコストが掛かる)ことに気がつく

547:デフォルトの名無しさん
12/02/06 07:56:49.62
コンティナーのせっかく抽象化したい照れーたをインクリメイツ
って発想が
キモイと思うのだが
片リストを逆から辿ろうとしたら
「このコードはバヤイ!リバースコピーをいテレータ用に確保なう!」
「もっといい方法があるのにp」
と忠告してくれるコンパイラーがあるといい

548:デフォルトの名無しさん
12/02/06 08:07:20.64
>>546
大概の実装はlistのsizeは定数時間になっていると思うが

549:デフォルトの名無しさん
12/02/06 11:33:49.80
>>548
それとこれとは関係ない。

550:デフォルトの名無しさん
12/02/07 16:30:45.59
while(true){
int a = 1;
cout << a << endl;
a = 2;
}

whileブロック内で変数を定義したらどんなもんかとこれを試してみたら
無限に1が出力されました。初期化って一度だけかな?と思ったけど
この結果ということは、これは一回のループごとに毎回変数が定義されてる
ということですか?auto変数の確保→破棄を延々と繰り返すみたいな。
だとするとwhileブロックの外で定義した場合に比べて効率が悪いのですか?


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch