[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 2chのread.cgiへ]
Update time : 05/09 16:03 / Filesize : 231 KB / Number-of Response : 985
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 12



1 名前:デフォルトの名無しさん [2009/07/19(日) 22:32:32 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

過去ログ
スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/
スレを勃てるまでもないC/C++の質問はここで 2
pc11.2ch.net/test/read.cgi/tech/1178503366/
スレを勃てるまでもないC/C++の質問はここで 3
pc11.2ch.net/test/read.cgi/tech/1187521676/
スレを勃てるまでもないC/C++の質問はここで 4
pc11.2ch.net/test/read.cgi/tech/1221633708/
スレを勃てるまでもないC/C++の質問はここで 5
pc11.2ch.net/test/read.cgi/tech/1230516307/
スレを勃てるまでもないC/C++の質問はここで 6
pc11.2ch.net/test/read.cgi/tech/1231564903/
スレを勃てるまでもないC/C++の質問はここで 7
pc11.2ch.net/test/read.cgi/tech/1232983248/
スレを勃てるまでもないC/C++の質問はここで 8
pc12.2ch.net/test/read.cgi/tech/1235921779/
スレを勃てるまでもないC/C++の質問はここで 9
pc12.2ch.net/test/read.cgi/tech/1240022781/
スレを勃てるまでもないC/C++の質問はここで 10
pc12.2ch.net/test/read.cgi/tech/1242300936/
スレを勃てるまでもないC/C++の質問はここで 11
pc12.2ch.net/test/read.cgi/tech/1245059383/

620 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 17:49:29 ]
すいません自己解決しました

621 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 18:52:55 ]
個数が分かってるならリザーブしとけば十分速いんでないの?

622 名前:610 mailto:sage [2009/08/27(木) 22:27:21 ]
Vectorで試してみました。

アクセスするだけならば、かなり早かったのですが
削除のために、iteratorをインクリメントしたりすると負荷が大きいみたいです・・・
iterator絡みの処理は負荷が高いんですね・・・初めて知りました。


>>621
リザーブすれば、速かったです。
ただ、削除・追加を行うには負荷が大きいようで
この事を考えると静的配列の方がいいのかなと・・・


623 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 22:37:42 ]
>>610
もうなでもいいから静的配列でやれ

624 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:13:23 ]
VC++ならvectorのiteratorはポインタ実装じゃなかったっけ
debugでやってないか?

625 名前:610 mailto:sage [2009/08/27(木) 23:24:20 ]
>>624
>VC++ならvectorのiteratorはポインタ実装じゃなかったっけ
VC++ですが、勉強不足で理解できませんorz
削除は、iteratorが指しているものしかできないようなのでインクリメントしてました。

debugでやってます。Releaseとの違いがよくわからず、ずっとdebugでやってきているのですが
処理速度などの違いがでるものなのですか?

626 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 23:30:20 ]
debugモードの時のSTLはエラーチェックがかかりまくるので相当遅い
releaseにするとコンパイル結果がiterator使ったときとポインタ使ったときで同じになる

まあ、なんだ、やってみろ
そしてEffectiveSTLでも読んでろ

627 名前:610 mailto:sage [2009/08/27(木) 23:38:06 ]
>>626
やってきました。吊ってきますorz
でも、こんな恥ずかしい事を早めに教えてもらって助かりました。リアルじゃなくてよかった・・・
EffectiveSTL買って読んでみます。



628 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 02:26:31 ]
なにこの<int>とかいうやつ。
適当に自前でリスト作って動かしたら速かったので変えたよ!

と、いう事態を何度か目の当たりにしたわ



629 名前:デフォルトの名無しさん [2009/08/28(金) 03:05:28 ]
上底を入力してください(単位cm)
3
下底を入力してください(単位cm)
4
高さを入力してください(単位cm)
5.0
台形の面積は17.5平方センチです

こんな感じのプログラムを作りたいんですが、

#include <iostream>
using namespace std;

int main() {

int input1,input2,input3;

cout << "上底(cm)を入力してください\n";
cin >> input1;
cout << "下底(cm)を入力してください\n";
cin >> input2;
cout << "高さ(cm)を入力してください\n";
cin >> input3;


return 0;
}

cin >> input3;から下が分かりません。

630 名前:デフォルトの名無しさん [2009/08/28(金) 03:19:06 ]
1つはfloatにするの忘れました。すみません

631 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 03:43:27 ]
ほー、台形の面積の求め方というのは、ゆとり教育と関係があったのか。
www.google.co.jp/search?q=%91%E4%8C%60%82%CC%96%CA%90%CF

632 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:35:59 ]
>>587
固定小数点にしたかったんじゃないの?

633 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 19:49:13 ]
>>632
俺もそれは思ったけどやるなら32768じゃない?
32767だとどうなるんだろ・・・

634 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 20:49:40 ]
>>633
ここのベクトル演算のヨタ話みたいなことじゃない?
www.flightinfo.jp/tmurakam/scatut2/fdinmen.html

635 名前:デフォルトの名無しさん mailto:sage [2009/08/28(金) 23:58:08 ]
#if PROTOTYPES
#define P(p) p
#else
#define P(p) ()
#endif
int func P((int x, int y));

こんな気持ち悪いプリプロセッサを見つけたんですが、
これは何事でしょうか?

636 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:01:06 ]
プリプロセッサを見つけたのかよ

637 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 00:22:15 ]
>>635
ヘッダファイル見たことないのか?
見れば、似たようなものがあちこちで使われだろう
ANSI-C形式のプロトタイプ宣言をサポートしてないCコンパイラのため

638 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:26:49 ]
int x = 3;
int* x = new int(3);
ってさ後者がヒープ領域で、前者はどこに領域確保されてるの?

似たような質問で
クラスのオブジェクトの宣言で(仮にStudentというクラスにnameというメンバがあったとして)
Student sato("佐藤");
Student* sato = new Student("佐藤");
ってできるけど、これってどう使い分けるの?
メンバにアクセスするとき 前者は sato.name ってできるけど
後者は (*sato).name or sato ->name じゃなきゃできないらしい本読む限り。
視覚的に前者の「sato.name」の方がわかりやすいんだけど。使い分けを教えてください。
よろしくお願いします。



639 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:34:33 ]
>>638
ヒープを知ってるならスタックを知ってても良さそうにおもうけど、スタック領域。

newはヒープ領域に確保、単なる宣言はスタック領域に確保

640 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:36:09 ]
スタックには置きたくなく、どうしてもアロー演算子がいやな場合はtypedefまたはエイリアスを作ればよいかな

641 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 01:37:17 ]
typedefうそでした!

642 名前:デフォルトの名無しさん [2009/08/29(土) 01:59:30 ]
>>638
Studentのインスタンスを不定個作りたいときは後者じゃないと。

643 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 10:56:55 ]
みなさんありがとう。
>>642
どういうこと? Student型の配列として扱い
Student* satous[] = {new Student("佐藤一郎") , new Student("佐藤次郎") };
ってやるためということ?


644 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:07:59 ]
>>638 インスタンスの寿命で考えると分かる。

{
Student sato("佐藤"); //ここでインスタンスが作られる。
}  //ここでインスタンスが自動的に消滅する。


Student* sato;
{
sato = new Student("佐藤");//ここでインスタンスが作られる
}//ここではインスタンスは消滅されない。
delete sato; //ここでインスタンスを消滅させる。


645 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:15:33 ]
>>643
インスタンスを不定個作るということは、インスタンスを作る時と削除する時を
コンパイル時ではなく実行時に決めるから。

646 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 11:31:41 ]
すみません
演算子のオーバーロードをした場合(例えば、operator()(int a)みたいな感じで)
クラス内部でアクセスするときは、operator()(10)とするのが良いのでしょうか?
それとも、(*this)(10)とするのが良いのでしょうか?

非常にくだらない質問だとは思いますが、よろしくお願いします


647 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 14:37:45 ]
(*this)は式のままの書式で書けるメリットがある。
でも()は関数の形式だからどっちで書いても大差がないね。

thisを使うと最適化にはどういう影響が出るのかな?知ってる人教えて!


648 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 15:20:47 ]
どっちでも変わらんように思うけど、識者に任せる



649 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 06:26:10 ]
>>634
そういうことならありえるね
参考になったわありがとう



650 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 08:42:11 ]
C++でJavaみたいにfinalメソッドを作ることはできませんか?

651 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:51:27 ]
>>650
virtualをつけなかったら、finalになるんじゃないの?

652 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 11:54:12 ]
継承エラーなクラスを作ることはできますよ

653 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:38:26 ]
>>651-652
親クラスのポインタに子クラスを代入してるときにvirtualつけてないメンバ関数を呼べば
確かにそうなるかも知れないけど。
そうじゃなくて継承はさせたいけど特定のメンバ関数は上書きして欲しくない。
こういうのはC++では無理っぽいですか?

654 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:39:31 ]
Boostにそれっぽいのはあったような

655 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 14:15:46 ]
>>651
お・・・おまw

知ったかぶりするなよ。


656 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 16:30:44 ]
>>647-648
ありがとう
取りあえずは見た目優先でも問題なしと言うことでいいんすかね?


657 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:11:22 ]
変数を使う直前で宣言した場合よりも、スコープの先頭で宣言したほうが処理速度が速くなって
びっくりしました。
これって一般的なことなんでしょうか?
条件によっては速くなったり遅くなったりするものですか?
コンパイラ次第なんでしょうか?

今、使っているコンパイラはVC++コンパイラです。

658 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:14:09 ]
一概には言えないが、そんなはずはないはず。
releaseでコンパイルしてCtrl+F5で実行しても?




659 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 18:18:18 ]
while(true){
ClassA a;
}
とかやってるんじゃない?

660 名前:657 mailto:sage [2009/08/30(日) 18:30:52 ]
>>658
Releaseコンパイルでそうなるんです。(DLLですので、実行時に別のアプリでそれを動かしてます)

>>659
いえ、forループには入っていますが、static intやstatic boolです。
クラスや大きな構造体を毎回初期化というようなことではないです。

不思議です^^;

661 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:37:27 ]
とりあえずコードを(ry

662 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:38:54 ]
>>660 ちょっとまて、おぬしスタティックと申したか?

663 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 18:59:19 ]
座標について質問です
5*5マスの座標の一行目の一番左を(x1,y1)、右へ行くほど数字を大きくして一番右が(x5,y1)
二行目の一番左が(x1,y2)、一番右が(x5,y2)・・とします
そして自分が(x3,y3)にいて、前方を向いていれば
前方に2、左へ1の座標は(x2,y1)になりますが、右を向くと(x5,y2)になり、
後方を向くと(x4,y5)になります
一箇所だけならifやselectで条件分岐させるのですが、量が大きいのです
こういう時、この座標はどう計算すればよいのでしょうか?

664 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 19:06:48 ]
三角木馬関数を使いなさい。

665 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 19:16:30 ]
>>664
ありがとうございまかす


666 名前:657 mailto:sage [2009/08/30(日) 19:18:44 ]
>>661
すみません、ちょっと複雑ですw

>>662
あ、はい、staticです・・・(?)

667 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 19:31:56 ]
>>663
class Hoge
{
int x;//位置X
int y;//位置Y
int x0://向きx
int y0;//向きy
public:
void Hoge()
:x(0),y(0)
,x0(1),y0(0) //初期値は右向き
{
}
void forward()//進む
{
x+=x0;y+=y0;
}
void right()//右に回転
{
int atmp=x0;
x0=y0;
y0=-atmp;
}
void left()//左回転
{
int atmp=x0;
x0=-y0;
y0=atmp;
}
};


668 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:07:05 ]
Stateパターンの方がよくね?



669 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:35:57 ]
C#のインデクサと同じことをC++でやるテクニックってありますかね?

670 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:39:01 ]
operator[]


671 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 21:56:30 ]
>>666
ソースを貼れないなら自分で調べるしかない。
該当箇所にブレークポイントを打ってF5。止まったところでALT+8して逆アセンブルを比較する。
処理速度が気になるときは逆アセンブルを見るのが近道



672 名前:663 mailto:sage [2009/08/30(日) 22:25:34 ]
>>664
すいません、ダメでした
>>663の前方に2、左に1のy座標を求めるために計算してみました

(120*π/180)でラジアンをだし、それを半径の長さ(1^2+2^2=5 ピタゴラスの定理でsqrt(5))
のsqrt(5)で割ってsinを出してみたところうまくいきません。どこが問題なのでしょうか?
↓のコードの結果は0.805573になります

#include <iostream>
#include <math.h>
#define PI 3.14159
using namespace std;
int main()
{
double deg = 120;
double rad = (deg * PI / 180.0)/sqrt(5.0);
cout <<sin(rad) ;
return 0;
}
>>667
ありがとうございます
アクションRPGに導入するとものすごいコードが短縮できました!
が、マスメ状ではうまく動きませんでした・・

673 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 22:56:24 ]
>>672
高校から数学をやり直せ
中学かもしれん

674 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:00:36 ]
sin()じゃどうあがいても1を超える事はないだろww

675 名前:663 mailto:sage [2009/08/30(日) 23:12:24 ]
すいません、三角関数は当時理解してたつもりでしたがいざ使うとなるとロクに使えませでした
おとなしくifで分岐させつつやります
ありがとうございました。

676 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:14:34 ]
>>675
いやまてまて、
三角関数とか忘れるものじゃないだろ。
数学の基礎中の基礎だぞ?
15歳のガキでも(理解しているかどうかは別として)一応ならうんだぞ??


677 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:20:33 ]
いや公式も覚えてるんですよむしろ忘れるはずも無い
半径が1で
筆記体のsin・cos・tanの頭文字を使って
始点が分母終点が分子
ttp://www1.axfc.net/uploader/Img/so/57580.jpg
この覚え方で忘れるはずも無いでしょう

ただこれを応用する力がなくなった、のか最初から無かったのか
前者だったはずなんだけどなぁ

678 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:26:51 ]
90度ずつしか回転しないうちはif文でいいけど
将来3DCGを使っていろんな方向に微妙に角度を変えるときは必須だよ^^



679 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 23:28:02 ]
>>677
>>672の問題点は、120degがどこから来たかだ。



680 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 00:00:17 ]
こんな感じじゃよ。たぶん。これで、いかなる角度への移動も可能。

codepad.org/QASgM33C

681 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 00:08:20 ]
ああなんだ回転行列か

682 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 00:13:25 ]
>>680
お前何でそんなに優しいんだ!
惚れるぜ

683 名前:657 mailto:sage [2009/08/31(月) 01:48:19 ]
>>671
分かりました。
ありがとうございます!

684 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 01:51:57 ]
回天行列です。

685 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 10:07:38 ]
そんな行列いやだー

686 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:01:07 ]
10年ぐらい前に売られていたバージョンのC言語って今のプログラム組むのに使える?
対応できてるものかい?

687 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:15:08 ]
C言語は10年前と何も変わってないよ

688 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:29:43 ]
>>687
分かりました。
では、10年前のVisual C++で色々プログラム組んでみます。
ありがとうございます。



689 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:39:22 ]
C言語とVisual C++が同じものだと思ってるのか? めでたいやつ

690 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:49:23 ]
>>689
なんだ?
10年前のVisual C++と今の環境は同じじゃないのか?


691 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 17:58:03 ]
こりゃまた、ずれたレスがきたな。日本語でOK な文だが。
まともに翻訳すると。
10年前の 「Visual C++」 と 「今の環境」 は同じか?
対象が違いすぎて俺には答えられないぜw

692 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:06:31 ]
>>691
答えられないなら書くなよ。
日本語で丁寧に書くと
10年前のVisual C++の環境や扱い方と今のVisual C++の環境や扱い方は、同じじゃないのか?
だ。

693 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:10:41 ]
ちがう

694 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:12:04 ]
>>692
お前な、自分が間違ってる上に開き直ってえらそうだな、おいw

695 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:17:13 ]
やっぱりソフトの購入からか。

>>694、どこが間違ってたんだ?

696 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:18:03 ]
Cというプログラミング言語自体はそんなに変っちゃいないが、
Visual C++というMS製のアプリケーションは大幅に変わっている

697 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:23:10 ]
>>696
アプリケーションがかなり変わってるのか、じゃソフトの買い替えからしないとダメだな。
サンクス。

698 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:24:52 ]
10年前のVC++で作っても今の環境で動くよ、問題ない
しかし最新のVC++は無料版もあるからそっちのがいいと思うんだ



699 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:28:51 ]
>>698
無料版のVisual C++なんてあるのか。
相当変わってるんだな。
試してみる。
色々ありがとう。

700 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:34:46 ]
何にも知らないで何も調べないでプログラムを組むとか早速高いソフトを買うとか

絶対釣りだろ

701 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:42:14 ]
>>700
10年前にC言語でプログラム組んだことあるし、その当時のプログラムの本は今でもあるよ。
しばらくの間お蔵入りになっててC言語の内容少し忘れてはいるけど。


702 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:47:08 ]
10年前のOSで開発するなら、10年前の処理系が最適かも。

703 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:53:20 ]
>>702
当時のバージョンのソフトがあるから今のPCにインストールして使ってみる。
あと、無料版も試してみる。

704 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 18:54:53 ]
DLLでnewする場合はDLLでdeleteしないといけないらしいんですが
DLLでfactoryをnewしてそのインスタンスからcreateする場合もやっぱりDLLでdeleteしないとだめですか?

705 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:15:39 ]
DLLとアプリケーションで、メモリ源が2つあると考えろ。
そして、その2つは扱い方は同じだが、返すべきところが違う。

DLL内のoperator deleteとアプリケーションのoperator delete、
どちらを呼び出して返却すべきかは、自分で考えろ。

706 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 19:47:44 ]
メモリはもらったところへ返す
DLL側のnewでもらったメモリはDLL側のdeleteへ返す
EXE側のnewでもらったメモリはEXE側のdeleteへ返す
DLLもEXEもみんな別々にメモリ管理してる (場合がある) から
ごっちゃにするとメモリ管理が混乱して落ちる (かもしれない)
それはウチで管理してるメモリじゃないぜ、とかそんな感じ
EXEもDLLもみんな、使うメモリはどっか一個所で一元管理してやれば済む話なんだが
みんな自分勝手だからな

707 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 20:26:35 ]
boost::shared_ptrを使うとカスタムデリータが確保した側のdeleteで自動的に開放してくれるから便利。


708 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:01:23 ]
shared_ptrの類を使うとインスタンス管理で負けた気がする。
全くの個人的な了見で、使う人を批判する気は全くないが。



709 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:13:01 ]
>>708
そんなこと言っていると
本当にインスタンス管理に(つーか他人の技術に)負けるぞ。

何事も新しいことは受け入れづらいものなのは分かるが。

710 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:16:38 ]
shared_ptrを普通のポインタみたいに記号ひとつで使えればいいのに。Foo@ foo;とか
typedef std::tr1::shared_ptr< foo > sp_foo_t;とかするのめんどくさい

711 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:27:12 ]
>>708安心しろ。それは杞憂だ。
shared_ptrを使うには循環参照を避けるクラス設計が必要になる。
それこそがインスタンス管理の勝利ではないか。

一度使い始めると雪崩的に使うようになるから。

712 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 21:29:52 ]
>>710
そういうことはC++0xの設計段階で提唱するべきだったな。


713 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 22:49:07 ]
>>710
using std::tr1::shared_ptr とすれば楽になる。

C++0xにはtemplate typedefができるらしいから sp<T>にでもtypedefすればいいんじゃないか


714 名前:デフォルトの名無しさん mailto:sage [2009/08/31(月) 22:59:08 ]
using sp = std::tr1::shared_ptr;
sp<hoge> sp_hoge;
0xだと↑みたいにできるらしいね。typedefより見やすいし良いと思う

715 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 14:25:43 ]
inline int func(int x){
return x * x;
}

みたいなinline関数があるとすると、
a = func((int)(b - c));

a = ((int)(b - c)) * ((int)(b - c));
みたいになるんですか?
それとも、
int x = (int)(b - c);
a = x * x;
みたいになるんですか?

716 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 14:40:29 ]
後者
マクロ展開と違って引数は1度しか評価されない

717 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 15:07:27 ]
>>716
ありがとうございます。

718 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 17:58:52 ]
>>713
彼はそんな程度は知っているだろ、たぶん。
彼が言いたいのはもうもっと言語仕様に
組み込んじゃえよってことじゃねぇか?




719 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:01:01 ]
>>717
>>716の言う通り、一度である。
よって、例えばmaxテンプレートとmaxマクロでは
max( ++a, b );
がどうなるかが変わってくる。

720 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:24:52 ]
>>719
715です。
これは確かにどちらなのかによって全然違いますね。

721 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:37:59 ]
>>720
というかマクロで作ったら未定義の動作だろ。
*未定義の動作=インターネットのニュースグループ、comp.std.cやcomp.lang.cでは、未定義のコードを実行した結果「鼻から悪魔が飛び出しても仕様に反しない」というjoke が流行したことがありました。今でもたまにこのような表現を見ることがあります。
初級C言語Q&A(7)
ttp://www.st.rim.or.jp/~phinloda/cqa/cqa7.html


722 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:36:29 ]
数字を四捨五入するにはどうすればいいんでしょうか?


723 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:38:06 ]
JIS, ISO式四捨五入なら専用の関数がいる

724 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:40:44 ]
四捨五入の意味を辞書で調べて、その通りにすればいいと思います

725 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 00:51:54 ]
CをまともにやらずにC++をやろうとするのは無謀?
それなりに努力はするつもりなんだが、どうなんですか?

726 名前:デフォルトの名無しさん [2009/09/02(水) 01:13:18 ]
別にいいと思うよ。
Cでポインタを理解しておけば、C++でポインタを勉強する必要がなくなるとかそんな程度だし。

727 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:14:01 ]
先にC++に慣れ切ってしまうと、後からではCではプログラムを組めなくなるんじゃないかという危惧がある
ゆとり教育とかいうと聞こえが悪いけど、なんかそんな感じ
でもいまどきC++が使えない環境ってのもそうそうないだろうとも思うわけで、
まぁ別にいいんじゃないか
無謀というほどのことはない
むしろSTLとか便利なライブラリのおかげでポインタをやたら使わずに済む分つまづくポイントは減ってるかもしんない

728 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 01:30:28 ]
>>726 >>727
返答ありがとうございます



729 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 02:15:29 ]
>>725
いやいきなりC++をやる事をオススメする
禿もそう言っているし

730 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 06:50:19 ]
>>725
> それなりに努力はするつもりなんだが
この覚悟があるならC++で良いと思うよ。


731 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 06:55:07 ]
Accelerated C++やC++プライマーを使うと良いでしょう。

732 名前:デフォルトの名無しさん [2009/09/02(水) 12:33:11 ]
ビジュアルCとビジュアルCじゃないCはどの程度の違いがありますか?

733 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:04:47 ]
「ビジュアルCじゃないC」 とかじゃなくて具体的な製品名をあげてくれ

734 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:35:26 ]
try catchで配列[]の添え字範囲外の例外をキャッチ出来る?
メモリのアクセス違反のキャッチと言うべきかな

735 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:42:33 ]
>>734
これ?
msdn.microsoft.com/ja-jp/library/5z4bw5h5(VS.80).aspx

736 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 13:50:10 ]
>>735
それっぽいけど
エラーの種類の判別方法がわからんね
調べてみます

737 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 14:16:12 ]
>>733
ずびばせん……
例えばボーランド?というやつではどういう違いがありますか?

738 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 15:14:59 ]
Borland C++Builder と Borland C++Compiler の2種類があるけど・・・

Borland C++Builder と Visual C++ はまったく異なる。
Borland C++Builder は Visual Basic みたいに部品ポトペタで開発していくスタイル。
Visual C++ はエディタでごりごりコードを書く開発スタイル。

Borland C++Compiler と Visual C++ はごりごりコードを書く点では変わらないけれど、
Borland C++Compiler には開発環境が付いておらず、
普通のテキストエディタ(メモ帳とか)でコードを書き、コマンドラインからコンパイラを使うことになる。
(いちおうベクターあたりを探せばフリーの開発環境がいくつか見つかる)
Visual C++ には豪華な開発環境が付いていて、ボタン一発でコンパイルでき、デバッガも組み込まれている。

ちなみにボーランド(の開発製品群)はエンバカデロに買収されました。
なので、たぶん Embacadero C++Builder とか呼ぶべき。



739 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 15:18:25 ]
>>738
で、そのコードはCなの?

740 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 15:22:47 ]
そもそも Visual C というのは無いから
Visual C++ のことだろうと推測した (C#のことだったらすまんね)
説明したのは書いてるとおり Visual C++ とボーランドなんとかというやつの比較

741 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 17:07:20 ]
ははあ……なるほど
Cプラが使えるのには違いはないんですね!?
ありがとうございました!

742 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 21:45:07 ]
hoge f(int a, int b, int c)
{
return hoge(a, b, c);
}

hoge h(f(1, 2, 3));

これだとコピーコンストラクタが無視されて、あたかも
hoge h(1, 2, 3);
のような挙動になるのは仕様で決められてる?
それともたまたまコンパイラの中の人が親切だっただけで?

743 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 21:57:59 ]
>>742 仕様で許可されている。返り血最適化RVOという。
許可されているだけなので最適化されるかどうかは中の人次第。



744 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:08:24 ]
下記の書についてです。
  (1).ANSI C/C++辞典(ttp://www.amazon.co.jp/exec/obidos/ASIN/4320027973/)
  (2).新ANSI C言語辞典(ttp://www.amazon.co.jp/exec/obidos/ASIN/4774104329/)

CだけでなくC++についても調べたいので(1)は買う予定でいます。
(2)は色々と評判に上がることが多いようなので迷ってるのですが、
・ (2)は(1)と重複している部分が結構あったりするのでしょうか。
・ (2)ではC++についてはまったく触れられていないのでしょうか。
・ 両方とも割と昔の本ですが、仕様の変更などで現在と異なる点はあるのでしょうか。
ご存知の方がいましたら教えていただきたいです。

745 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:29:39 ]
C++は1998と2003年に改正されてるけど1996年の本でいいの?
いいんだ。あ、そう。

746 名前:デフォルトの名無しさん mailto:sage [2009/09/02(水) 22:54:35 ]
新のつかないほうのANSI C言語辞典を持っているけど、これは今でも使える。
まあ古い本なので、ワイド文字関係と誰も使っていないC99に関する事柄が抜け落ちているけど。
だから、新のほうもおそらくおすすめできると自分は思っている。

ANSI C/C++辞典は分からない。初版は図書館で見たことあるけど、これ3版だからノーコメント。
個人的には、C++の内容を辞典的に網羅するにはページ数が少なすぎるだろうというのが気掛かり。
そのアマゾンによれば590ページらしいが、C言語辞典ですら500ページ近くある。
(初版でもC言語辞典より小さな字で詰めて配置してあったとはいえ)

747 名前:744 mailto:sage [2009/09/03(木) 00:22:24 ]
情報ありがとうございます
最近の本も探してみたのですが、評価が芳しくないものやパッとしないものが多くて…
古い本なので逆に図書館にあるかも知れませんね
近所の図書館をあたってみて、もしあれば中身を確認してみようと思います


748 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 02:00:47 ]
今まで文字列の取り扱いは char * を使ってたのですが、そろそろ汎用性を考えたコードも
意識して書かないといけないかなとか思い始めてます。
ところがなんか TCHAR だの wchar_t だの LPTCSTR だのと色々とあって、どういう時に
どれを使えばいいというのが判りません

どういう考えで、どういう型を使うのが一般的なのでしょうか



749 名前:デフォルトの名無しさん [2009/09/03(木) 02:38:19 ]
char*でおk。

750 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 02:47:38 ]
蒸し返すようだけどGET_SET_ACCESSORって要するに
「今は何もしない素通し処理にしておくけど、将来的に別の処理が入った時に
クライアントコードの書き換えが必要になるとまずいからとりあえずアクセサ
になってますよ」って意味じゃね?
必要になったら普通に書き直せばいいし、何もしてないです、ってのが一目で
分かるし、悪くないマクロだと思うが。
まぁ俺はマクロ嫌いだから極力使わないんで、これも使わないけど。

751 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 04:09:28 ]
・いつか処理が変わるかもしれないからアクセサは常に作るべき
・次のフェーズで変更されることが分かっているからアクセサを作るべき
・必要になってから作るべき

という感じで意見がいつも割れるんだよ

752 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 04:24:39 ]
ハイ!先生
「メンバは原則 public しといてゲッタセッタ必要になったら private に異動で十分」派です。

753 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 05:40:12 ]
それ呼び出し側のコードが変わるじゃん

754 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 05:51:34 ]
で?

755 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 05:54:39 ]
>>752
それだとメンバ変数名を変えたくなっても変えられないな。
Get/Setでポリモーフィズムが使えないな。

>>750
単純な代入とかだったらGET_SET_ACCESSORでいいと思うし、
頑なに拒否する人を見て何が悪いのかと思ってたけど、
デバッガで見れないって言うのがね、ちょっと嫌かな。

756 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:26:37 ]
そうやってアクセサとメンバ名の乖離が起こるわけですね。

ポリモーフィズムが使えないという点は全く理解できないので追加説明をしていただけると助かります。

757 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 06:46:09 ]
>>753
変わって何か問題ある?

758 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 07:12:09 ]
別に問題ないよ



759 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 10:22:49 ]
書き換えるのが面倒
プロジェクト内の全ファイルから問題の箇所を一発で全部置換できるエディタを持ってるのなら気にする必要はない

760 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 12:47:14 ]
wrproperty使ったほうがクライアントがすっきりうんこ

761 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:06:03 ]
汎用的なライブラリでそんな作業しようと思うとぞっとする。
変数書き換えのタイミングも追いづらいし。

762 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:10:09 ]
a* [2]
a[0] = new b[2]
これって可能?アクセス方法ってどうやるの?

763 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 15:31:20 ]
不可能

764 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 17:50:35 ]
プラスとマイナスをひっくりかえす関数ってありますか?
例えば5なら-5に、-9なら9に変えてくれる関数です

765 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 17:55:16 ]
関数にするまでもない
a = -b;
とかで十分

766 名前:764 mailto:sage [2009/09/03(木) 18:00:34 ]
本当だ、できました
ご親切にありがとうございました

767 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 19:31:38 ]
1.f←これってfloatとして扱うってことですよね?

いま呼んでいる本に

double r = srcR * srcA + ( 1.f - srcA ) * dstR;

というコードがあるんですが
「1.0」(double型)じゃなくて「1.f」(float型)をつかう意味ってありますか?
srcR、srcA、dstR、はどれもdouble型です。


768 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 19:46:22 ]
>>767 ありません。



769 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:02:16 ]
もともと全部floatで書いていたコードを何かの理由でdoubleに直したときに
そこだけ修正し忘れた、とか

770 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:06:08 ]
>>768-769
わざわざfloatにしてるから
何かしらメリットがあると思ったんですが
何もないんですね。
ありがとうございます。

771 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:19:58 ]
>>767
何か勘違いしてそうだから念のためにいっておくと、
 double の 1.0 は 1. と書くこともできる
 float の 1.0f は 1.f と書くこともできる

772 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:23:02 ]
shared_ptrに確保されたインスタンスがあったとして
そいつのweak_ptrを返すメンバ関数とかってどうやって実装してるの?

773 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:26:22 ]
>>756
変数がpublicだったらアクセサを経由した取得にならないからだろ。

774 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 20:58:14 ]
>>771
0付けなくても良かったんですね
ありがとうございます

775 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 21:13:34 ]
>>772
shared_ptrとweak_ptrはインスタンスを直接保持するのではなく、インスタンスを管理するオブジェクトを経由して保持している。
weak_ptrは管理オブジェクトを参照すればインスタンスが有効かどうかが分かる。



776 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 22:08:14 ]
wktk_ptr
kwsk_ptr
sneg_ptr

777 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 22:08:39 ]
いや、なんていうか
sp->getThisWeakPtr();
みたいなことしたいんですけど無理なんですかね?

778 名前:777 mailto:sage [2009/09/03(木) 22:46:10 ]
あ、自己解決したわ



779 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 23:32:43 ]
使いたくもない敬語を無理に使ってるってことがよく分かる

780 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 02:37:31 ]
?

781 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 13:18:09 ]
1: char a[20];
2: char a[20]={0};
3: char *a = new char[20];
これらのうちでは
動作が軽い順で言うとどうなりますでしょうか?


782 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 13:40:41 ]
1が最も軽く、3が恐らく最も重い

783 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:00:22 ]
3は
delete[]a;もセットで考えないといけない。

784 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:18:13 ]
>>782
なるほど。
1と2では、
初期化する場合としない場合とでやはり速度差があるのですね。

>>783
ありがとうございます。そうすると3は重そうですね。

ありがとうございました。

785 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 14:20:44 ]
1.のコストは0なのだ。


786 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 15:20:48 ]
C++のisoが定めた規格が
無償で(英語でもいいので)見られる
サイトを教えていただけますでしょうか?


787 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 15:39:02 ]
C++のqueueについてなんですが、
queueで作ったデータ列を配列みたいに見るってできないんでしょうか?
front()で頭を見る以外の方法が分かりません…

788 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:00:37 ]
>>787配列のように扱えないのがstd::queueのメリット。
配列のように使えるキューが欲しいならstd::dequeを使う。




789 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:02:12 ]
>>786
iso 14882 2003 pdf - Google Search
www.google.com/search?name=f&hl=en&q=iso+14882+2003+pdf

790 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:04:58 ]
>786
C++についてはC言語ほど詳しいわけではないけど
ドラフトなら無償で手に入れることができたはずだったんだけど、なんか本家死亡中?
規格書の正式名称をどうたらこうたらで手に入れることができる

791 名前:786 mailto:sage [2009/09/04(金) 16:08:13 ]
>>789-790
丁寧にありがとうございました。
助かりました。

792 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 16:14:52 ]
>>788
分かりました。どうもです

793 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:11:55 ]
全然別人ですが、
C99の規格は英語でいいのでどこかで手に入りませんか?

ググろうにも何でググればいいのか悩みます。

794 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:17:06 ]
JISの規格票じゃだめなのか?

795 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:34:38 ]
JISの規格は閲覧するのにとても苦労するので。
(標準のpdfリーダがadobeじゃ無いためです。)

796 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:50:34 ]
n1124.pdfとか

797 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:55:47 ]
>796
それはC0x Draft, N1124, 6 May 2005だな

798 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 17:57:26 ]
どの版がいいの



799 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:09:13 ]
ええと、一番普遍的な版がいいのですが。
そんな最先端のプログラミング技法には深入りするつもりもないので。


800 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:27:02 ]
テンプラメタプログラミングなんてやってなんか得したことあった?

801 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:41:44 ]
知的好奇心が満たされるw

802 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 18:49:15 ]
>>800 似たような重複コードを書かなくてすむ用になる。




803 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 19:05:32 ]
(プラシーボで)実行速度が速くなった

804 名前:デフォルトの名無しさん [2009/09/04(金) 19:48:32 ]
C++でスレッドをやってみたら思いのほか簡単にできた。
それでも複数の値渡しはいちいち構造体を定義しないといけないなんてどうしてこんな回りくどいやり方でないといけないのか
もっとすっきりしたやり方考えろよ

805 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 19:50:41 ]
自分で好きなように作ればいいじゃないか?

806 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 21:25:36 ]
>>804
スレッド開始時の関数に引数を渡すときのことを言っているなら、boost::threadはどう?
bindと組み合わせれば何引数でもいけるよ。

もちろん、それ以外のAPIでもbind使えるようにできるけど。

807 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:34:38 ]
テンプレートメタプログラミングは定数のコレクションを生成するとき便利だよ。
その数が万単位になると劇的に速度が変わる。

808 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 23:37:14 ]
テンプレートメタプログラミングは
天才がライブラリを作るときに便利だと思うよ。

凡人が挑戦すると死亡するだけ。



809 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 05:58:07 ]
ちょっとやってみたけどコードがぐちょんぐちょんになった

810 名前:デフォルトの名無しさん [2009/09/05(土) 15:50:47 ]
C言語における、ダブルクォートで囲んだ文字列と、
シングルクォートで囲んだ文字列は、どういう違いがあるのでしょうか?

明確に違って、ダブルクォートで囲んだほうは文字列の最後に何か追加されたような気がする、まではおぼえているのですが…

どなたかご教授いただけませんでしょうか

811 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:52:34 ]
>>810
シングルクォートで囲んだ文字列
の意味が分からん。

そんなもの存在しない。


812 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:56:35 ]
>>811
ごめんなさい
文字列という言葉ではおかしかったかもしれません
っていうか、シングルクォートで囲んだものは文字列ではなくて、文字、でしたっけ

"aaa" == 'aaa' ではないことは覚えているのですが
あえて
"aaa"をあえてシングルクォートで囲んで表現したらどう表記するのでしょう、といった質問です

813 名前:811 mailto:sage [2009/09/05(土) 15:58:56 ]
>>812
"aaa" -> 言語仕様として存在する
'aaa' -> 言語仕様として存在しない

というこれ以上ないほどの違いがあるぞ。



814 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:59:51 ]
つーか、どんなC使ってるのか知らんが、
'aaa'
はCでは出来ないよ。

815 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 15:59:52 ]
{ 'a', 'a', 'a', '\0' }
こんな感じか?

816 名前:811 mailto:sage [2009/09/05(土) 16:01:13 ]
それとも
"aaa" -> C/C++ではcharないしconst char型の配列型で、その数は4である。(終端にヌル文字が付く。)
"a" -> C/C++ではcharないしconst char型の配列型で、その数は2である。(終端にヌル文字が付く。)
'a' -> const char型の文字型変数。
であることを言いたいのか?



817 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:01:55 ]
char *p = malloc(3);
p[0] = p[1] = p[2] = 'a';

818 名前:810 mailto:sage [2009/09/05(土) 16:02:24 ]
過去ログを読み直していたらこんなコードにぶつかったので質問した次第です
文字とか文字列とかそういう問題で捉えたのがいけなかったんですかね

624 :デフォルトの名無しさん[sage]:2008/01/30(水) 00:58:29
#include <iostream>

int main(void)
{
    const int max_str = 50 + 1;
    char str1[max_str], str2[max_str];    
    std::cout << "数値a入力>";
    std::cin >> str1;
    std::cout << "数値b入力>";
    std::cin >> str2;

    int len1, len2;
    for( len1 = 0; len1 < max_str; ++len1 ){
        if( str1[len1] == '\0' )
            break;
    }
    for( len2 = 0; len2 < max_str; ++len2 ){
        if( str2[len2] == '\0' )
            break;
    }



819 名前:810 mailto:sage [2009/09/05(土) 16:05:44 ]
>>816
ヌル文字!

文字数!

それです、私が思い出したかったと思われるキーワードはそれです!
あとは自力で調べられそうです
ありがとうございましたー


820 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:07:04 ]
たぶんシングルクォートの文字列は
char foo[] = {'f', 'o', 'o', '\0'}; /* '\0'は'\000'または'\x00'などと同じnull character(JISではNULと表記される)を表す */
だと思う、シングルクォートは文字定数を表記するときによく使われる、そのほかの目的でも使うことはある

ダブルクォートの例は
char bar[] = "bar"; /* {"baz"};とかくこともできる */
char *baz = "baz";
ダブルクォートで囲んだ場合、文字列リテラル(文字列定数)と呼ばれる
この場合、コンパイラは気を利かせてnull characterを付けてくれる
したがって、sizeof(bar)は4となる

しかしながら
char hog[3] = "hog";
の場合、コンパイラは気を利かせてnull characterを追加しない、つまり
char hog[] = {'h', 'o', 'g'}; /* char hog[3] でもよい*/
とした場合と同じ結果となる

と長々書いているうちに解決していたでござるの巻

821 名前:810 mailto:sage [2009/09/05(土) 16:08:38 ]
>>820
ありがとうありがとう
大感謝です

822 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:22:47 ]
どうでもいいけど、
結局何を疑問に思っていてどう解決したのかさっぱりわからん。

823 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 16:30:04 ]
要はかなりのうろ覚えだからどう検索すりゃいいのかも分からなかったんだろ。

824 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:20:19 ]
>>820
char *baz の sizeof は勘違いしたらいかんよ。

825 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:28:41 ]
>824
例が悪かったか
ほとんどの環境ではsizeof(char *)も4だったね

826 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:33:44 ]
記号関係で検索しようと思ったら確かに詰むわな。どうにかならんかな。

827 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:46:40 ]
>>825
例えが悪いっていうか、同列に並べたら混同しちゃうだろw
char bar[] = "bar"; とchar *baz = "baz"; じゃ意味が全然違うのに。

828 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:49:24 ]
>>813-814
いや、'aaa'のように中に文字が複数ある場合、その値は処理系定義。
仕様にないとかできないとかはちょっと言い過ぎだと思う。
まあ、実際問題使わないからそういう認識でも構わないと俺も思うけどさ。



829 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:52:12 ]
シングルクォートの中には文字が一つのはずと理解していたのに
'\0'をみて、まるで2つの文字からなる文字列が入っていると勘違いしたんじゃないのだろうか。

830 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 17:56:07 ]
VC++は'aa'と二つはできたな。
三つ以上は試したことがない。

831 名前:デフォルトの名無しさん [2009/09/05(土) 17:59:36 ]
>>828
マジックナンバー表すのによく使われる。3文字は見たこと無いけど。

832 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 18:01:31 ]
>>831
ちょっとマジックナンバーについて簡単に説明してもらえますか?

833 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 18:06:18 ]
VC++ならchar c = '??/n';とかできるな

834 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 19:57:38 ]
問題を整理しよう。
・>833はトライグラフ。
・シングルクォートで囲える文字数は(トライグラフやエスケープ文字を処理した後の)4文字程度(環境依存)。
・その場合のエンディアンも環境依存。

ということで宜しいかと。
で、例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。

835 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 20:06:54 ]
多文字リテラルはC90でもあるだろうに

836 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 21:49:37 ]
なんだかんだいって、もう本人は解決しちゃったんだろうぜ。

837 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:10:10 ]
>>834
もう一度聞くけど、マジックナンバーについて簡単に説明してもらえますか?
どうも一般的に使われているものと異なるように思うので。

838 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:25:51 ]
やだね、こういう言いたいことを裏に覗かせつつ質問する馬鹿って。

>>837
マジックナンバーと呼ばれるものには私の知る限り3種類ある。
・野球のマジックナンバー。詳細は知らん。
・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。
・主にバイナリファイルの先頭に置いて、ファイルの種別を明示するために使われるバイト列。或いはそれを数値化したもの。
Unix使いなら/usr/share/file/magic辺りにあるから覗いてみるといい。



839 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:29:20 ]
馬鹿とまで言われるとは思っていませんでした。
> ・コード中に埋め込まれた由来不明の値。何故その数字か判らんが兎に角動くと言う皮肉を込めて、マジックナンバーと呼ぶ。

僕もこれだと思っていたのですが、>>834さんは出力がマジックナンバーといっているので、
いったいどういう事だろうかと思ったんです。

840 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:33:47 ]
質問しただけで荒れるってジャスティスののか

841 名前:デフォルトの名無しさん [2009/09/05(土) 22:34:25 ]
>>837
en.wikipedia.org/wiki/Magic_number_(programming)
まぁファイルフォーマットとかを直接触らない人には関係ないかもね。

842 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:40:05 ]
>>841
・an unnamed or ill-documented numerical constant value;
これを言いたそうな気配はするんだが、なんか違った意味で使ってるよな
そりゃ質問もされるだろうよ

843 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 22:52:03 ]
元素か

844 名前:デフォルトの名無しさん [2009/09/05(土) 23:05:49 ]
Linuxでは出力もマジックナンバーと呼ぶんだけどな。
ドザは頭が悪くて困る。

845 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:09:48 ]
C言語でプログラムを作成してる際にわからないことがあったので質問させてください
3次元座標(-0,5、0,5、0)を
(sin(t)、t、cos(t))
みたいな形で現したいと思ってるんですがどのように現すのか教えてください

よろしくお願いします

846 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:16:03 ]
どうも使い方の間違いを肯定したくなくてすり替えばかりしているように見える
よくあることだけどな

847 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:17:38 ]
>>845
sin(0.5)は-0.5ではないし、cos(0.5)も0ではないが・・・
どういう意味なので?

848 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:19:00 ]
>>845
double point_3d[3];
point_3d[0] = sin(t);
point_3d[1] = t;
point_3d[2] = cos(t);

とか?



849 名前:845 mailto:sage [2009/09/05(土) 23:25:39 ]
DrawLine関数で
(-0,5、0、0)から(-0,5、0,5、0)までの直線をひきたいんですが、その後にその線を変数θを使用して回転させたいと思ってるのでsincosで座標を現したいと思ったのですが
可能でしょうか?

850 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:35:32 ]
Linuxでも
>例えばint foo = 'abcd'としてprintf("%d\n", foo)としたときの出力が、所謂マジックナンバー。
なんていったりはしないよ。
もし言うというなら、Linux板にコピペしてきてそのスレで1000人の同意があったら認める^^

851 名前:デフォルトの名無しさん [2009/09/05(土) 23:43:12 ]
>>849
直交座標系と極座標系の変換を知りたいの?
もし単に回転させたいならアフィン変換すればいいだけだけど。

852 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:48:39 ]
>>851
よくわかりません
x座標が-0,5なので-cos(60)でいいのかと思ってやってみてもうまくいかなくて…

3次元での座標を表すときのsinθcosθというのは単に数値を入れるのとは全く別物なんでしょうか?

(0,5、1、0)の座標をsincosの座標で現したいと思ったときに(cos(60)、1、sin(0))と表してもまったく別の位置に表示されるんですけど

853 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:51:36 ]
sin,cosの引数はラジアン。

854 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:52:08 ]
sin、cosの引数は度じゃなくラジアンだから *3.14/180 しないとだめ

855 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 23:59:56 ]
ありがとうございます
わかりました

856 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 00:29:07 ]
こないだからC++以前に数学がわかってないやつが多いな

857 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 00:34:46 ]
というか、本にせよリファレンスにせよ、どっかで説明読めば
引数がラジアンだってことくらい書いてあるはず
理論に基づいて組み上げるんじゃなく
カンでプログラミングしてるんじゃないか

858 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 00:52:37 ]
普段からsmartポインタって乱用してる?
複雑な管理が必要になる部分以外は余分なコストがかかるから使わないほうがいいのかなって思ったんだけど



859 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:02:17 ]
RAIIとかPimplイディオムを実現するには必要不可欠だろうが

860 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:05:49 ]
RAIIとpimplってほんとによく出てくるなぁ。
RAIIはさておき、pimplは目の当たりにしたことがないから実感がわかない

861 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:06:50 ]
使わなかったところで、それと同様のコードを自分で書く羽目になるだけ、自分へコストが跳ね返ってくる。

まあ、最も単純かつ実行時の負荷が低コストでしかも標準のauto_ptrが残念な出来なのは仕方がない。
unique_ptrに期待しましょう。

862 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:07:24 ]
Exceptional C++を読みなせえ

863 名前:845 mailto:sage [2009/09/06(日) 01:51:30 ]
すいません
さっき教えていただいた通りにラジアンで線を引けたのですが、for文で線を何本も引いて円を書こうと思い
(sin(θ×t)、1、cos(0))
とし、tの値を少しずつ大きくしていきました。
そうするとx軸に沿って円がかけるはずだとおもうのですが45度から130度くらいまでの扇形みたいな形しかできません

まったく理由がわかりません

どなたかアドバイスをください
お願いします

864 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:59:23 ]
自己解決しました

865 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 02:01:44 ]
質問の文章考えてるヒマがあったらトライ&エラーやってた方が有意義じゃないか?

866 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 08:28:07 ]
>>858 乱用してるよ!!

スマポのメリット>>>>>>>>>>>>ほんのわずかなコスト


867 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 09:05:17 ]
>>858
スマポの評価はboostのスマポ、特にshared_ptrを使ってからしたほうがいい。
マジお勧め。


868 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 11:04:43 ]
確かにboostのshared_ptrはその利便性からいって鬼。
これ以上ないほどの。




869 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 11:12:58 ]
FFTで求めた実部データと虚部データから振幅スペクトルを求めるにはどうしたらいいですか?
パワースペクトルだと大きすぎるのでさけたいです

870 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 11:19:21 ]
>>869
帰れ

871 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 12:08:14 ]
>>869
mag=hypot(real,image)


872 名前:デフォルトの名無しさん [2009/09/06(日) 12:19:02 ]
>>870だが断る

873 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 14:29:57 ]
グローバル変数を使う時は、関数プロトタイプ宣言より前じゃないとダメなんでしょうか?


874 名前:873 mailto:sage [2009/09/06(日) 14:30:42 ]
日本語おかしかったです、すいません
グローバル変数を使う時は、関数プロトタイプ宣言より前にグローバル変数の宣言をしないとダメなんでしょうか?

875 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 14:32:20 ]
グローバル変数の宣言と関数プロトタイプは何の関係もなくね?

876 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 14:33:31 ]
そうでしたか、ありがとうございます

877 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:45:55 ]
かかわるプロジェクトでは必ず三項演算子は目の敵になってるんですがgotoみたいな存在なんですか?

878 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:48:40 ]
そんなことないよ。
記述の仕方を統一したかっただけじゃない?



879 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:51:37 ]
行数稼げないからって理由だったら嫌だなw

880 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:54:15 ]
>>877
なんでだろね。
どうも三項演算子を理解できないレベルに合わせろってことらしいんだが、まじかね。

881 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 16:26:07 ]
理解なんて数秒で済むと思うんだけど

古いコンパイラで条件演算子にバグがあって禁止されていた事はあった

882 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 16:58:04 ]
>>880

構造化プログラミングから逸脱する場合には不可ってことだと
思うんだけど、本質が理解されないまま全部NGになってること
はよくあるね。

参考演算子そのものの理解は当然だれでもできる。


883 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:01:43 ]
ゴメン、「三項」ね。


884 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:02:09 ]
三項演算子は()を下手に省略するとアレ?って挙動になってバグ取り高い壁になる

885 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:10:05 ]
>>882
構造化プログラミング?
逸脱する場合としない場合kwsk。
逸脱するというのであればすべて逸脱では。

886 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:14:19 ]
どんな用途か知らんが、三項演算子は特に問題ないと思うがw

887 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:17:26 ]
>>882
三項演算子どころか、ポインタもろくに理解せずに仕事してるやつ多数。
それが現実。

888 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:23:23 ]
int x = 0;
int y = 0;
bool b = なにかを代入;
//逸脱しないとき
if (b)
{
x = 123;
}
else
{
x = 456;
}
これは、x = b ? 123 : 456; とできるけど、bの意味する内容とか局所性によってはまぁ許容かな…。

//逸脱するとき
if (b)
{
x = 123;
y = 234;
}
else
{
x = 456;
y = 789;
}

こっちは
x = b ? 123 : 456;
y = b ? 234 : 789;
で書けるけど、b の真偽値に応じた代入処理のセットだと言うことが分からない。
elseifの節が後で現れるともう保守性までNG。>>885 の指摘通り、逸脱するかと
言えば全部逸脱だと思う。ちなみにオレは三項演算子は、ほぼNGにしたい派。



889 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:27:37 ]
>>888
そもそもそんなコード書かないだろというか例が悪すぎるw

890 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:32:20 ]
何とも都合のいい主観判断をするものだ

891 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:33:21 ]
>>888
なんでNGかkwsk。
2つ目みたいな書き方はめったにしないと思うが、その最初の例でNGにしたい理由は?

892 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:36:16 ]
class HogeString
{
private:
  char* str;
public:
  bool isEmpty()const{ return (name == NULL) ? true : false; }
  // これをifで書いたら
  bool isEmpty()const{
    if(name == NULL){
      return true;
    }
    return false;
  }
};

ifだと冗長的な感じがする。こういうのは三項演算子でも良いと思うんだけどな。

893 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:38:30 ]
return name == NULL;

894 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:41:46 ]
ですよねぇ〜。書いた後で気づいたわ。

895 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 17:43:47 ]
ワロタ

896 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 18:54:01 ]
string, int, int, int の4つのデータをまとめて扱いたいのですが、
mapだと2つ以上の値のセットを扱うとエラーが出てしまいました。
こういう2つ以上の値のセットを扱うためのコンテナってありますか?

897 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 18:56:27 ]
keyとなるものだけを残して他の3つは構造体かクラスにすれば良いじゃん。

898 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:36:57 ]
namespaceってプロジェクトにひとつぐらいで十分?もっと細かく分けたほうが良いかな



899 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:37:19 ]
CからC++に来たけど&が参照だったりアドレスだったりして気が狂いそうです

900 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:39:40 ]
>>898
好き好き。
>>899
狂ってろ。

901 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 20:52:05 ]
*がポインタ宣言だったり参照はがしだったり掛け算だったりする
Cから来たなら大丈夫よ

902 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:07:11 ]
>>899
使い方が全然違うじゃん。
・・・それぐらい分からないと他言語でも無理だろ。

903 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:08:13 ]
>>898
俺は2階層ぐらいだけど。
一番大きいプロジェクトの根幹のnamespaceと、
namespace implementationとか。


904 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:37:13 ]
C++のSTLに含まれているstringのメンバ関数に、
find_first_not_ofというものがありますが、
この関数を
find_first_not_of("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_0123456789")
という風に使って、アルファベットと数字とアンダーバー以外の文字数が
最初に出現する文字数を調べようとしたのですが、うまく働いてくれません。
(;や+などを感知してくれません)

これはなぜでしょうか?

905 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:46:43 ]
>>904
とりあえずソースかけ。
話はそれから。

906 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:49:20 ]
>>904
codepad
ttp://codepad.org/

ここで。

907 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 21:53:17 ]
>アルファベットと数字とアンダーバー以外の文字数が最初に出現する文字数
文字数が出現する文字数ってなんだ?

908 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:12:22 ]
ちょっとぐらい間違ってる日本語を補正する頭もないのかお前は



909 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 22:25:16 ]
>>908
2か所間違ってるけどな。
まあなんにせよ>>906にあるところに貼ってくれるのをまとう。

910 名前:デフォルトの名無しさん [2009/09/07(月) 19:31:24 ]
CあるいはC++でSQLサーバに接続するにはどうしたらいいのでしょうか?
検索しても.NETFrameworkを使ったやり方しかなく困っています
どなたかご教授お願いします

911 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 19:32:59 ]
sage忘れすまそ('A`)

912 名前:デフォルトの名無しさん [2009/09/07(月) 19:48:12 ]
質問です。
32ビットのWindowsの場合malloc()で確保出来るメモリサイズは2Gほどだったと思いますが、
これは、1プロセスあたりの制限ですか?
1つのプログラムで、malloc()を2カ所で呼び出すと、それぞれの箇所で2G確保できるのでしょうか?


913 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 19:54:23 ]
>>910
ODBCでよければ、
ODBC C++とか、ODBC VC++で検索。

914 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:11:32 ]
>>912
プロセスごとに2GB

915 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:40:05 ]
>>912
どんだけ激しいメモリ消費なんだw

916 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:44:44 ]
>>914
THX
困ったなぁ・・・。ディスクアクセスしながらちびちびやるか。

>>915
48Gほどのテキストデータを木構造に展開して色々やらないといけないのよ。
う〜む、もう少しダイナミックにオンメモリでやりたかった・・・


917 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:45:33 ]
>>916
You, 64ビットに移行しちゃいなYO!

918 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:48:57 ]
BDが真っ青



919 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:53:13 ]
>>916
64bitしかあるまいw
どのみちそんなにメモリ詰めないだろw

920 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 20:59:40 ]
サーバ用でもない限りマザーボードの上限に引っかかるな

921 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:25:21 ]
>>916
アルゴリズムを検討してメモリの消費量を抑えるのが手っ取り早い。そのほうがいろいろ高速化できる。
それでも解決しないなら最後の手段として64bitOSと64bitコンパイラの採用を考える事になると思うよ。
どんなにメモリがあってもアルゴリズムを改良しないと演算時間がとてつもなくかかりそうな予感。




922 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:43:58 ]
48GBのテキストデータって何ぞ?
漏れのおかずフォルダでもそんなにねーぞ。

923 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 21:59:47 ]
>>922
そうか、本当に無いのか検証の必要があるな。よし、どっかにアップロードしろ。

924 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:00:23 ]
ゲーム作っててつまずいたので質問します
struct Test{
TEST1 b[2];
省略
}
std::list< Test > lstTest;
こうやって使ってるんですが、このTEST1の配列を動的に確保することってできますか?
リストの中にリストとかしてみたんですが、同じような動きにならなくて困ってます。(ポインタの問題?

925 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:10:58 ]
リストの中にリスト、大丈夫なはずだが

926 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:11:14 ]
64Gって、研究かな?
今は、64Gのテキストデータなんてのを普通に使うようになったのか・・
恐ろしい時代だ・・・。

927 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:12:01 ]
>>924
struct Test {
std::vector<TEST1> b;
};
でいいと思う。
あと解説サイトを見てlistとvectorの使い分けを覚えよう。

928 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 22:14:01 ]
list -> 知的でおしゃれな感じを出したいときに使う
vector -> スマートなやり手プログラマを演出したいときにはコレ
deque -> 研究者気取りのあなたに



929 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:22:48 ]
48GBとかのデータを扱うなら、クラスタ上でMPIとか使って並列プログラミングってのが筋かなあ

930 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:54:41 ]
buf[10] = 0xff
buf[11] = 0x32
...


int kansu(u_1 *buf){`

i = 10;
printf("test buf[i] %d", i, buf[i])


このようなプログラムで、引数で配列を渡したとき
printfでbuf[10]等の中身を見ようとしたとき、表示がおかしな値になるのですが
どうしてでしょうか?

%d, %s, %x 等もおかしかったのですが

931 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:55:52 ]
"test buf[%d] %d" では?

932 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:14:45 ]
>>931
すみません、ここに書き方間違ってました。
実際のプログラムではそうかいてます。申し訳ありません。
そう書いて、表示がおかしかたtのです


933 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:23:39 ]
%x

934 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:34:53 ]
ソースを張るなり上げるなりしてください

935 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:40:31 ]
u_1が何なのかわからないとなぁ

typedef unsigned char u_1;
だったらprintf()はスタック破壊してるだろうし
typedef unsigned long double u_1;
だったら表示がおかしいとかの次元じゃないし

936 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 00:47:23 ]
>>935
u_1は、unsignede char です

スタック?どの辺がおかしいのでしょうか?

937 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:06:55 ]
>>930
断片だけ書かれてもわからん。
おかしな値が再現するソースを見せてくれ。

938 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:11:54 ]
>>937
すみません、今手元にないのでそのままお見せできないんですが
下のような感じです。とはいってもさっきと一緒で分かりにくいでしょうが・・


buf[50] ;
buf[1] = 0; buf[2] =5 等代入
void kansu(buf);

void kansu(u_1 *buf){`

i = 10;
printf("test buf[%d] %d", i, buf[i])

printf以降でbuf[i]の中身を別のバッファにコピーしてるのですが、
それを確認しようと思い、printfで確認しようとしたところ
まずその確認以前にうまく表示できなかったもので・・・



939 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:18:12 ]
そもそも、bufの型はなんなんだ?
メモリは確保されてるのか?

940 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:18:36 ]
>>939
malloc関数でかくほしております

941 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:19:31 ]
>>939
bufは、unsigned char です

942 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:23:51 ]
mallocで確保するんならbuf[50]は変な気がするけどな。

943 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 01:40:27 ]
>>941
> i = 10;
> printf("test buf[%d] %d", i, buf[i])
別に表示がおかしくなることはないと思うがな。
この部分の、期待している表示と実際の表示を書いてくれ。

944 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 07:33:43 ]
>>943
期待しているのは、buf[i]に代入した値が表示したいのですが、
全く関係ない数字が表示されてしまいます。4桁とか

945 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 07:47:07 ]
部分だけじゃ、どこがおかしいかわかんねえよw

946 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 08:04:01 ]
いくら間違っても4桁になるのはありえなさそうなんだが。。


947 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 08:31:55 ]
>>938
まだコードが断片すぎる。コンパイルできるぐらいのまとまったものが
ないと他の人には問題は発見できないよ。



948 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 09:21:13 ]
printf("%d", (unsigned char) 0xff)が何を表示されるのかって問題に帰結するのかな?
それだったら255だ。これがもしprintf("%d", (char) 0xff)ならば、-1かもしれないが。
それ以外の結果になるというのであれば、他の何かがおかしいのだろうよ。



949 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:03:25 ]
fopen()でファイルを開くコストって結構かかる物なのでしょうか?
今実装してるプログラム、メモリ的な制限から探索範囲を狭めるために、ファイルを結構細分化するつもりなんですが・・・


950 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:15:34 ]
>>949
ベンチマーク取ればいいが、
どんだけ多くても数百個だろ?一瞬。
むしろそれを超えると、OSの最大ディスクリプタ数にひっかかる。

951 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:16:48 ]
>>949
まあストレージの種類によるんじゃないかな。ハードディスク上のファイルだと、
ファイルが分散しててディスクヘッドが頻繁に移動するのはハード的にきつい

952 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:30:14 ]
>>949
48Gテキストの人か

953 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 18:59:52 ]
頻繁にファイル開いて読み込んでってやってたらかなり遅くなるな。
一回読み込んだ内容はメモリ上にキャッシュして、キャッシュあふれたら
使用頻度低いほうから解放して…みたいな戦略は考えといたほうがいいと思うね。

954 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:04:30 ]
>>949
ファイルのオープンクローズよりも、開いたファイルでシークしたほうがはるかに軽い。

ファイルの一部分をメモリにマップする手法としてメモリマップドファイルがあるよ。
ディスクキャッシュをメモリにマップするんで大きなデーターを効率的にアクセスできる。


955 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:08:25 ]
Hoge::operator[](A,B,C);
hoge[a][b][c];
みたいなことができればいいのになんでできないんだよ

956 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:25:33 ]
>>955
それでオーバーロードを許したらambiguous多発で大変じゃないか

957 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:44:33 ]
まあ仕方ないからhoge[make_tuple(a,b,c)];
とかやってるんだけどもっとクールアンドホットなハック的テクはないわけ?

958 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:46:37 ]
>>957
プロキシーオブジェクト



959 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 20:53:26 ]
>>955 ちょっと工夫すればできるから。

960 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:02:07 ]
やろうと思えばそりゃできるけどさ
コストとか範囲チェキとか考えると[][][]・・・でできるいいほうほうが浮かばないんだよ

961 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:02:39 ]
>>955,958
ちとめんどいができるじゃんと思ったら
あれプロキシーオブジェクトっていうのか
初めて知った。さんくすw


962 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:02:51 ]
>>957
operator()じゃ駄目なのか?

963 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:03:31 ]
>>962
見た目がまずダサいのでアウト

964 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 21:07:57 ]
make_tupleにダサイって言われると地味に凹むな

965 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 11:35:00 ]
同意

966 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:13:55 ]
ある本の息抜き用の演習問題に、「++CではなくC++と名付けられた理由を考えよ」ってのがあったのですが
正解は何なのでしょうか?

967 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:19:55 ]
Cの互換性を保つため

968 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:26:45 ]
あ、なるほど。前置インクリメントだともはやCではないものを意味するってことですね。



969 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 23:49:38 ]
まあ、今適当に考えただけなんだけどねw
トンチ的な問題だろうから、たぶんそんなに的はずれでもないと思う

970 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 04:17:25 ]
へんなコストがかかるところ

971 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 11:40:42 ]
>>970
深いな。

972 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 13:58:48 ]
//beginコード1
for(int i=0; i<5; i++){
  // コード
}

int i;
for(i=0; i<5; i++){
// コード
}

C++で上か下、どちらのループの方が良い(皆さん使われている)のでしょうか?

973 名前:972 mailto:sage [2009/09/10(木) 13:59:57 ]
1行目の
//beginコード1
は間違いです、すみません

974 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 14:03:33 ]
i の中身がループの外でも意味を持つなら後者、持たないなら前者で十分。
どっちが良いとか悪いとかじゃなく。

975 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 14:35:18 ]
>>974
なるほど、ありがとうございます。

976 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 15:45:51 ]
>>966
C++ : Cを評価してからインクリメントする
++C : Cをインクリメントしてから評価する

C++ は、まずCを評価してから機能を加えたんだよ。

977 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:13:48 ]
baseクラスがいくつかの仮想メンバ関数を持っています(たとえば、void f1(), void f2())
f1の実装は2パターン、f2の実装も2パターンあります
subクラス側で外部ファイルを参照してそのデータからf1,f2の組み合わせを決定したいです
この場合4種類のsubクラスを作るほかやり方はありますか?

978 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:16:35 ]
仮想関数f1だけのクラスと仮想関数f2だけのクラスをそれぞれ作って2パターンずつ実装し、
subのf1, f2は単にそっちを呼び出す



979 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:17:02 ]
>>977
f1 なり f2 の中で条件分岐すればできる

980 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 17:27:46 ]
>>978
つまりこういうことでしょうか?
class hoge
{
private:
only_f1_impl *f1_;
only_f2_impl *f2_;

public:
void f1(){f1_->f1();}
void f2(){f2_->f2();}
};
メンバ変数へのアクセスで一手間かかりそうですが、よさそうなので使わせてもらいます
ありがとうございました

>>979
条件分岐は後で大変そうなのでちょっと・・・

981 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 19:56:01 ]
##ってどういう意味か教えてください

982 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 20:01:49 ]
そのトークンが現れる位置によって意味が異なるので一概に答えることはできない

983 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 20:38:19 ]
インスタンスがshared_ptr(かweak_ptr)の形でしか生成できなくすることってできる?

984 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 21:07:22 ]
>>983
コンストラクタをプライベートにして、ファクトリメソッドを書くとか。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<231KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef