トップページ⇒tech
1001コメント317KB

【初心者歓迎】C/C++室 Ver.75【環境依存OK】

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2011/03/04(金) 15:00:26.99
エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。
※sage禁止です(と代々スレに書いてありますが自己判断で)。

【前スレ】
【初心者歓迎】C/C++室 Ver.74【環境依存OK】
http://hibari.2ch.net/test/read.cgi/tech/1289292155/

◆ソースのインデントについて
半角空白やTABでのインデントはスレに貼ると無くなります。
そのため、アップローダーに上げるのも手ですが直接貼る場合は、
全角空白か に置換すると見栄えだけはよくなります。

【アップローダー】(質問が長い時はココ使うと便利)
http://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
http://codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
http://ideone.com/ (時間帯によってはcodepadが重い事があるのでここも利用)

0153デフォルトの名無しさん2011/03/27(日) 13:06:11.90
>>151
ありがとうございました
すべて出るようになりました
0154デフォルトの名無しさん2011/03/27(日) 15:34:29.59
>>152
おまえおめでたい奴だな
自分のコードのバグも解析できないくせに何が安全だ
お前が数学者ならプロの技術者に依頼しろよ
お前が技術者ならさっさと辞めてそのたいそうな理論を外注しろ
そうすればみんな幸せ
車輪のオナニー再発明なら頑張ってデバッグしな坊や
0155デフォルトの名無しさん2011/03/27(日) 15:49:48.50
>>154
核心を突きすぎ
だいたいこんなところで聞いてる奴の言っていることだからな
0156デフォルトの名無しさん2011/03/27(日) 15:51:32.15
車輪のオナニーは、まだ発明されてないかも
0157デフォルトの名無しさん2011/03/27(日) 17:04:51.06
すごく初歩的な質問なのですが、以下のコードが正しく動作するのはなぜなのでしょうか

const std::string &s = "foo";

0158デフォルトの名無しさん2011/03/27(日) 17:19:52.18
>>157
const参照はなんか特殊だってばっちゃが言ってた
0159デフォルトの名無しさん2011/03/27(日) 20:29:07.01
お勧め"しない"本/著者ってなんかある?
"こういう内容のは怪しいと思え"とかがあれば、本を選ぶ時の参考にしたい
0160デフォルトの名無しさん2011/03/27(日) 20:36:06.46
void main()と書いてある解説書は怪しい
0161デフォルトの名無しさん2011/03/27(日) 20:36:39.80
おまじない
0162デフォルトの名無しさん2011/03/28(月) 03:03:42.58
>>156
いや、確か以前それをした外人がいるはずだ。
しかし再発明出来たとしても同じ結末を迎えるのならやめたほうがいいものだったはずだ
0163デフォルトの名無しさん2011/03/28(月) 16:52:18.00
すみません。環境依存OKとのことなので、ここで聞きます。VC2005についてなのですが、VC++2005のスレが見当たらないので・・

VSが欲しいなあとおもっていたんですが、StandardEditionは2010からなくなったとの事でProfessionalEditionを買うしかないのですが、
そこまで高いものは買いたくないんです。で、VSStandardEditionはというと、オークションなどでも高値で売られています。

でも、近くのPCショップでVS2005を売ってるところを発見したのです。
今はVC6.0を使っているのですが、VS2005を買うと大きなメリットとかありますか?
使用目的は、Win32APIとMFCです。

自分にとっては、2万というのはけっこうな大金なので、買おうか迷っています。
良いメリットがあるなら、教えてください。
0164デフォルトの名無しさん2011/03/28(月) 17:18:50.73
Express Editionならタダだが、どうしても買いたいの?
まずはVS2010Express入れてみたら
0165デフォルトの名無しさん2011/03/28(月) 17:26:50.62
>>164
Express Editionはもう入れているんですが、
Standard Editionで、良い機能とかあるなら買いたいです。

あと、Express Editionには、MFCがないので・・
0166デフォルトの名無しさん2011/03/28(月) 17:55:16.35
有料版だったらアドオンが使えるとか
俺もEEだから実際に使ったことはないけど紹介見る限り結構開発に便利そうなのもあった
0167デフォルトの名無しさん2011/03/28(月) 18:04:37.76
今のEEにはリソースエディタは付いているのかな?
.rc をテキストエディタで作成/編集するのは泣ける
0168デフォルトの名無しさん2011/03/28(月) 18:10:13.89
>>165
あーそういうことか
.NETに関してはVS2005(.NET2.0)じゃお話にならないけど
VC++ならそれほどでもないかな
どうしてもC++0x系の機能が欲しいんなら駄目だけど

ただVS2005, VS2008はCランタイムがサイドバイサイド(SxS)化されてて
扱いがちょっと面倒くさい
VS2010でCランタイムに関してSxSが廃止されて元に戻った
(manifestも要らなくなった)んで、VS2010のが楽
この二世代は、この点で、ある意味黒歴史って感じだ
0169デフォルトの名無しさん2011/03/28(月) 18:11:35.44
>>167
リソースエディタはフリーでもあるでしょう
勿論UI要素をクリックしてMFCのイベントハンドラを記述するみたいな
連携は望むべくもないけど
0170デフォルトの名無しさん2011/03/28(月) 18:15:42.33
2005のスレあるじゃん
0171デフォルトの名無しさん2011/03/28(月) 18:16:01.68
>>169
そういう連携は期待していないんで…
フリーであるのか。 探してみよう
0172デフォルトの名無しさん2011/03/28(月) 18:33:13.12
MFCを欲しがる人がまさか本当に実際にいたことを確認できて何か嬉しい。
0173デフォルトの名無しさん2011/03/28(月) 18:39:38.02
個人的にはATL/WTLしか使ってない
ただ、MFCは2010のSP1ではDirect2Dサポートが加わったりしてるようだし
一応進化し続けてると言えるのでは
WTLはもうとまっちゃったからなー
0174デフォルトの名無しさん2011/03/28(月) 19:31:57.42
>>170
あるのはVSのスレだろ
VC(MFC)しか必要ないからVSは目に入らなかったんじゃないか?
0175デフォルトの名無しさん2011/03/28(月) 20:29:47.48
ATL使いたいんだけどやっぱり有料版買うしかないのかな?
0176デフォルトの名無しさん2011/03/28(月) 20:32:13.45
>>163
MFCメインみたいだけど、VC6からVS2005だとあまり変わらないかもね
VS2008SP1でのリボンUIサポート、VS2010SP1でのD2Dサポート位しか大きい変化って記憶にないな
0177デフォルトの名無しさん2011/03/28(月) 21:41:47.21
メリットといえば、IDE自体が使いやすくなっているというメリットがありはする。
あと安定性という点で、可能なら2008以降の方がいいと思う。
0178デフォルトの名無しさん2011/03/29(火) 17:26:55.77
LinuxでCPU使用率が100%でないかどうかを調べる方法を教えてください
0179デフォルトの名無しさん2011/03/29(火) 17:32:33.87
すみません。C++に直接関係なく数学寄りな質問で申し訳ないのですが、
1200個のものを、70個の箱(配列)に分けつつ、
・1箱目が一番多く、徐々に減って、70個目は1個しかない 
・1箱目が一番多く、徐々に減って、70個目は1箱目の半分しかない
等という事を実現したいのですが、こうしたプログラムの解説サイトをどなたかご存知でないでしょうか?
0180デフォルトの名無しさん2011/03/29(火) 18:04:26.24
>>179
台形の面積を求めるのと買わんない>>179
(上底+下底)×高さ÷2
これが分かればいけるでしょ

面積は1200平方、高さは70、上底は1、下底は1より大きい
面積は1200平方、高さは70、上底はx、下底は2x
01811792011/03/29(火) 18:39:59.90
>>180
ありがとうございます。最初解りませんでしたが
理想に近い結果を得る方法がわかりました。スレ違い失礼しました&ありがとうございました。
0182デフォルトの名無しさん2011/03/29(火) 22:48:02.82
>>178
ロードアベレージが1超えてなければ100%じゃないんじゃないのかな
0183デフォルトの名無しさん2011/03/29(火) 23:45:35.31
>>178
vmstatコマンドで、idleの値を見るのは?
0184デフォルトの名無しさん2011/03/30(水) 04:12:55.31
STLのlistでinvalidなiteratorをeraseするとexceptionがthrowされず
プログラムが落ちるのですが、これを回避するすべはないでしょうか?
走査するくらいしか思いつきません
0185デフォルトの名無しさん2011/03/30(水) 04:34:14.88
itr = l.erase(itr);
0186デフォルトの名無しさん2011/03/30(水) 04:44:19.26
>>184
iterator を持ってる間は erase() しない。
erase() した iterator はすぐ捨てる。
0187デフォルトの名無しさん2011/03/30(水) 05:32:12.44
>>185,186
ありがとうございます
無効なイテレータを持ち続けないようにします
0188デフォルトの名無しさん2011/03/30(水) 07:03:21.25
wininetのHttpQueryInfoで最終更新日時のタイムスタンプがほしいのですがどうしたらいいでしょうか
01891882011/03/30(水) 07:56:32.96
よく調べたらIf-Modified-Sinceというヘッダを送ればステータスコードで更新されたかどうかわかるようなのですが
送るための日付をHttpQueryInfoから文字列で取り出す方法が分かりません
またこのヘッダを送るというのは"If-Modified-Since:日付"をInternetOpenUrlの引数で渡せばいいのでしょうか
質問が変わりましたがよろしくお願いします
0190デフォルトの名無しさん2011/04/02(土) 22:26:44.47
質問です。

Cをそこそこやっています。C++は少しかじった程度です。
VC++を使っています。

今までコンソールベースのプログラムしか書いてこなかったのですが、
ボタンやテキストボックス等があるグラフィカルなものを作りたいと思っています。

「win32アプリケーション」というのを勉強するのが良いのでしょうか?
それとも、Javaが良いでしょうか?
それと、もし良い本があれば教えてください。
0191デフォルトの名無しさん2011/04/02(土) 22:27:37.38
今なら、C#が良いんじゃね
0192デフォルトの名無しさん2011/04/02(土) 22:28:38.99
>>190
マルチしてんじゃねえ、このグズやろう。
0193デフォルトの名無しさん2011/04/02(土) 22:31:59.67
ちょろっとラムダ式とbind(0xの方)で遊んでたんだけど
bind系じゃないと実装できねぇよ、的な事って何かある?
0194デフォルトの名無しさん2011/04/02(土) 22:43:51.02
ない
0195 ◆LLLLLLLLL. 2011/04/03(日) 09:37:20.42
| ̄:/ : : /: : : : : : : :i: : : i: :\ : :\    \
|: / : : : / : : : : :.i: : : : |: : : :|: : : |: : : i     '
: :|: : : : |: : i: : : :|: : : /i|: : :|:| : : :|: : : |     |
: :|: : : : |: :.|:斗 十‐/ i|: :∧-‐ト|: : : |     |
: :|: : : : |イ|: :|:/ |:/   |:/ |ハ: : |: : : |  \_,ノ
: :|: : : : | レヤ示ト     rテv|:./|: : : :|
ヽ|: : : : |/{:::::::i }     トイ レ: :|/|/   関東地方 
( |: : : : 代c::ノソ     レリ |: : : : |       東北地方 北海道地方
.〈.|: : : : |x`¨       、¨x.|: : : i:|    にいる
\|i: : : :|        ,   /|: : : i:|      すべての 愛すべき 国民へ 告ぐ
∨リ\: :iト 、      `´ ィ  |: : /|リ      
‐┴―\|- 〈 >rァ 爪|V  |/
:::::::::::::::::::::::ヽ \ リ
::::::::::::::::::::::::__\
:::::::::::::::/ ::r――‐へ      rっr‐-、_
:::::::::/ :://      ∧. | ̄ ̄ ̄| | | | | ̄ ̄ ̄ ̄ ̄ ̄ ̄|..
:::/ ::/ /          ヽ|.    L|_|_ト'           |
/ ::::/  /         \   ただちに 逃げろ    |
. :::/ |/           |                 |.
0196デフォルトの名無しさん2011/04/03(日) 10:09:09.66
忍法帖まとめ

忍法帖は名前欄に
!ninja
とすれば出てくる。
って最近知った。どれどれ

●だか買うと最終書き込みから5分経過すればレベルが一つ上がるらしい。
そうじゃない人は24時間経過すればレベルが一つ上がるらしい。
あと、cookieの設定がうまくいってないとレベルが上がらないらしいから、
何日たってもレベル0,1の場合はHap cookieの設定をチェックだ。

レベル10以上になると
Lv=NN,xxxP『T』
ってなってスレ立てできるようになるらしい。
0197 忍法帖【Lv=4,xxxP】 2011/04/03(日) 12:52:33.13
!ninja
0198 忍法帖【Lv=1,xxxP】 2011/04/03(日) 12:55:51.27
!ninja
0199 忍法帖【Lv=5,xxxP】 2011/04/03(日) 13:26:39.51
本文は適当で良かったはず
0200 【東電 81.0 %】 忍法帖【Lv=4,xxxP】 2011/04/03(日) 13:30:00.80
!denki !ninja
0201 [―{}@{}@{}-] 忍法帖【Lv=1,xxxP】 2011/04/03(日) 14:03:13.26
!ninja
0202 【東電 79.4 %】 忍法帖【Lv=2,xxxP】 !ninpu2011/04/03(日) 15:14:40.54
ほうほう
0203 忍法帖【Lv=7,xxxP】 2011/04/03(日) 16:00:08.50
このスレでやるなぼけ共
0204デフォルトの名無しさん2011/04/03(日) 18:28:18.74
http://hibari.2ch.net/test/read.cgi/tech/1293201229/536-
これが民度の違いか
0205 【東電 83.6 %】 忍法帖【Lv=3,xxxP】 2011/04/03(日) 19:15:45.74
!denki !ninja
0206デフォルトの名無しさん2011/04/05(火) 15:37:41.75
複数の状態の組み合わせとして、ビットフラグを使って
|や&で演算する方法をよく見ますが、32個とかしか表現できませんよね?

極端な例で128個の組み合わせを管理しようとすると、
どのような方法になるのでしょうか?
0207デフォルトの名無しさん2011/04/05(火) 15:51:56.06
32*4
0208デフォルトの名無しさん2011/04/05(火) 18:57:22.40
bool128個の配列で持てばいいだろ。
何でそんなにビットフラグが好きなんだ
0209デフォルトの名無しさん2011/04/05(火) 19:01:13.71
std::bitset
0210デフォルトの名無しさん2011/04/05(火) 19:50:43.88
西日本も福島原発の放射能に曝される。

4/7 予測 http://up3.viploader.net/ippan/src/vlippan198234.jpg
発表はドイツ気象庁 http://www.dwd.de/
0211デフォルトの名無しさん2011/04/05(火) 21:15:49.69
vector<char>::iteratorにオフセットを加算したときout of rangeとならないようにする方法は
++しつつ!= iterator.end()をチェックする方法以外にありますでしょうか?
よろしくお願いします。
0212デフォルトの名無しさん2011/04/05(火) 21:42:09.53
>>211
std::vector なら size() で先に分かるじゃないか
0213デフォルトの名無しさん2011/04/05(火) 23:26:40.96
>>212
vector<char>::iteratorの位置が不定なので、size()の情報を元に算出する方法がわからないのですorz
0214デフォルトの名無しさん2011/04/05(火) 23:27:54.50
誰か訳してくれ
0215デフォルトの名無しさん2011/04/06(水) 00:18:26.18
ビットフラグは加算していくだけで全ビットの状態の組み合わせが表せるけど
std::bitsetも簡単にそういうことできるんだっけ
0216デフォルトの名無しさん2011/04/06(水) 00:34:49.45
>>213
不定なら、どこ指しているのか分らんのだから、!= iterator.end()したらだめだろ
不定ならiteratorなんて使えない

0217デフォルトの名無しさん2011/04/06(水) 01:06:49.14
>>214,216
std::searchとかで戻ってきたiteratorなのでどこかは指してます
0218デフォルトの名無しさん2011/04/06(水) 01:20:42.14
if(std::distance(it, end()) < offset)
0219デフォルトの名無しさん2011/04/06(水) 01:22:22.16
>>213
int( it - vect.begin() )
で何番目を指してるか分かるんじゃねーの?
0220デフォルトの名無しさん2011/04/06(水) 02:08:00.03
>>215 bits = bits.to_ulong() + 1
0221デフォルトの名無しさん2011/04/06(水) 02:21:17.25
>>220
でもいったんキャストするとなると結局long longの64bitで最大64個の組み合わせまでしかインクリメントで全表示できない?
まあそんなに多くの状態数が計算に必要だとしたら、そもそも計算時間的に問題有りなのかもしれないけど
0222デフォルトの名無しさん2011/04/06(水) 02:30:14.57
>>221
組み合わせひとつごとの処理が仮に1ナノ秒で済んだとしても、
65ビット目がインクリメントされるまでに500年以上かかるぞ。
0223デフォルトの名無しさん2011/04/06(水) 05:40:30.86
>>218-219
std::distanceで解決しました。ありがとうございました
0224デフォルトの名無しさん2011/04/06(水) 13:43:18.64
end-offset < it
よりdistanceのほうがよさげだった
0225デフォルトの名無しさん2011/04/06(水) 21:47:28.54
>>222
だよな
まあ実際に計算するわけじゃなくて、なんとなく気になったから聞いてみた
0226デフォルトの名無しさん2011/04/07(木) 16:32:25.15
>>224
どっち使っても一緒。ランダムアクセクイテレータに対しては-演算子を使うように特殊化されてるから。
0227デフォルトの名無しさん2011/04/07(木) 16:37:38.37
排他制御について教えてください。 Linux環境でファイルを読み書き
する共有ライブ ラリを作成していて、
その共有ライブラリが複数プロセスから
ファイ ル名を指定されて呼ばれます。
共有ライブラリ内でファイルアクセス毎に
semget()して排他制御をしているんですが、
プロセスからこき使われると、
セマフォ集合を削除する 暇がなくて、
semop()時に指定しているSEM_ UNDOの
累積がSEMVMXに達してしまいどうしようか考えています。
そもそも、ライブラリ内で排他をかけてるのが 間違ってるのでしょうか?
0228デフォルトの名無しさん2011/04/07(木) 17:52:44.92
暇がなかろうがする必要があることはしなきゃだめ
(暇があってもする必要がないことはしない方がいい)

SEM_UNDO必要あるの?
0229デフォルトの名無しさん2011/04/07(木) 18:31:40.92
共有ライブラリで、セマフォ作っているので、アンドゥしていない場合

ロックをした状態の時に、プロセスが
強制終了されると、手動でセマフォを
削除するか、システムを再起動しないと
動かなくなってしまいませんかね?
0230デフォルトの名無しさん2011/04/07(木) 18:59:56.68
単位はあくまでもプロセス
0231デフォルトの名無しさん2011/04/07(木) 19:13:40.88
親プロセスが、セマフォの責任もてる設計にしないと、
問題があった場合に対象できない
ということですか?
0232デフォルトの名無しさん2011/04/07(木) 21:20:59.49
共有ライブラリじゃなくて、ファイル管理プロセスにする訳にはいかなかったんだろうか。
02332272011/04/08(金) 16:36:57.82
ありがとうございます。
プロセスでセマフォを制御してもらえる
様に調整してみますね。
0234 忍法帖【Lv=3,xxxP】 2011/04/08(金) 18:13:06.66
Cのソースファイルがあるのですが、Linux上でWindows向けの実行ファイルを作成することはできるのでしょうか?
0235デフォルトの名無しさん2011/04/08(金) 18:34:42.23
使ってるディストリがmingw32パッケージ用意してたらそれ入れろ
0236デフォルトの名無しさん2011/04/09(土) 04:40:12.31
クロスコンパイルでggr
0237デフォルトの名無しさん2011/04/10(日) 04:43:10.93
すみません。
2重のfor文の処理中に、その2重のfor文全域を抜けてしまいたい場合、continueでは思い通りに行かない為
gotoとラベルで抜けているのですが、他にもっとマトモなやり方が有ったりするのでしょうか?
0238デフォルトの名無しさん2011/04/10(日) 05:50:45.01
関数に切り出してreturnが定石
0239デフォルトの名無しさん2011/04/10(日) 05:58:25.29
break代わりならreturnでもいいけど
continue代わりならgotoでもいいんじゃないかな
0240デフォルトの名無しさん2011/04/10(日) 08:58:00.69
>>237
continueでは思い通りでなくgotoで抜けているコードの実例を頼む。
抜けているのはループじゃなくて頭じゃないかって気がするんだ。
0241 [―{}@{}@{}-] デフォルトの名無しさん2011/04/10(日) 09:00:26.03
breakがreturn代わりになるのか
0242デフォルトの名無しさん2011/04/10(日) 12:57:04.24
http://ideone.com/DhfKI
速度がどうなるかはシラネ
0243デフォルトの名無しさん2011/04/10(日) 14:01:59.95
C言語で無名関数(?)ってなんかきもいな
0244デフォルトの名無しさん2011/04/10(日) 21:50:07.74
何を言っているんだお前は
02452372011/04/10(日) 23:38:17.04
>>238-241
頭が抜けておりますた。 continueじゃなくてbreak2回ですね。
gotoは使うべきではないとあちこちに書いてたから
その外に抜け出そうと使って良い物かと考えていましたが、なんとか大丈夫そうですね。
ありがとうございました、そして勘違いすみませんでした;
0246 忍法帖【Lv=12,xxxPT】 2011/04/11(月) 14:07:46.89
break2回を許容したということだろうか
0247デフォルトの名無しさん2011/04/11(月) 15:33:07.38
速度を気にするなら内側のループをインライン関数にしてreturnの値から
外側のループを抜けるかどうか判断するのが妥当なきがするけどな。

まあステータス変数をもってあげても良いと思うよ。

まあ何はともあれループ内にだらだら処理を書かないなら適当にさばいときゃ良いと思う。
0248 忍法帖【Lv=5,xxxP】 2011/04/11(月) 17:09:03.04
SSDに書き込みをする際に、注意する点を教えてください。
一キャラクタずつ書き込むのは、SSDにはよくないのでしょうか?
0249デフォルトの名無しさん2011/04/11(月) 17:18:08.34
>>248
ブロックデバイスってのはセクタ単位で読み書きするものだ
プログラムから、ディスクなどのブロックデバイスに対して
セクタの整数倍になってない適当なサイズでのwriteが可能に見えるのは
背後でランタイムやOSがバッファリングしてまとめ書きするから
0250デフォルトの名無しさん2011/04/11(月) 18:13:37.28
でもバッファリングしない設定になってたりするよね。
ドメコンのシステムドライブとか
0251デフォルトの名無しさん2011/04/11(月) 19:27:32.39
物理的にセクタ単位でしか読み書きできないわけだから
セクタサイズにアラインさせるための最低のバッファリングは常にされるよ

もっともWindowsの話で言うと、FILE_FLAG_NO_BUFFERINGでファイル開いた場合は
OSレベルのバッファリングが切れるが、その場合、WriteFile()に渡すバッファを
セクタ長にアラインさせ、きっかりセクタサイズの倍数で書き込むのがユーザの
責任になる(つまり、いずれにせよ1バイト単位では書き込めない)



0252デフォルトの名無しさん2011/04/11(月) 19:55:13.49
>>237
try (...) {...} catch (...) {...}
■ このスレッドは過去ログ倉庫に格納されています