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/
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 コンストラクタをプライベートにして、ファクトリメソッドを書くとか。