C++相談室 part82
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
2010/06/02(水) 20:20:13ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part81
http://pc12.2ch.net/test/read.cgi/tech/1273407971/
0809デフォルトの名無しさん
2010/07/25(日) 21:50:480810デフォルトの名無しさん
2010/07/27(火) 09:44:09このときアプリからは MyLib2.so のみをリンクすれば使えるようにしたいです。
MyLib1.a を MyLib2.so の中に埋め込むにはどうすればいいでしょうか?
0811デフォルトの名無しさん
2010/07/27(火) 09:46:360812デフォルトの名無しさん
2010/07/27(火) 20:46:25std::vector<int> a;
typeof(a)::iterator b;
みたいなことってどうやったらできる? 一行目がvectorだったりdequeだったりしても二行目を書き換えずに済ませたい
0813デフォルトの名無しさん
2010/07/27(火) 21:14:13auto b = a.begin();
0814デフォルトの名無しさん
2010/07/27(火) 21:14:47こう?
http://msdn.microsoft.com/en-us/library/dd537655.aspx
0815デフォルトの名無しさん
2010/07/27(火) 21:53:37typedef std::vector<int> container;
container a;
container::iterator b(a.begin());
必要に応じてtypedef宣言をdequeに置き換えればいい
0816デフォルトの名無しさん
2010/07/28(水) 01:30:280817デフォルトの名無しさん
2010/07/28(水) 09:21:20VS2010にバージョンアップして
>>813
の一択ですよ
0818デフォルトの名無しさん
2010/07/29(木) 13:58:02じゃあ教えてくれ、以下のようなことをやるのにイテレータを使って
どうやればいい?
for (unsigned int i = 0; i < n; i++) {
for (unsigned int j = i; j < n; j++) {
if (i != j) {
v[i][j] = v[j][i];
v[j][i] = 0;
}
}
イテレータだとループ中、現在位置が分からないというのが最大のネック
0819デフォルトの名無しさん
2010/07/29(木) 14:26:25なんでベクター限定のコード書いてイテレータがどうとか言ってんの?
ベクター限定なんだからそのままのコードでいいじゃん。
全然関係ないけどそのコード自体見直した方がいいよ。
「私は劣化プログラマです」って言ってるようなものだよw
0820デフォルトの名無しさん
2010/07/29(木) 14:44:33逆順イテレータとか使いにくそうじゃない?
0821デフォルトの名無しさん
2010/07/29(木) 15:32:13unsigned int使ってるって言ったの俺だよ。
劣化プログラマですっていうのは受け入れます。
元々unsigned int使わざるおえなくなったのは上のvectorの
場合なんだ。
イテレータ万能というように言う人が結構いたので、
あらためて質問という意味で書かせてもらった。
これはイテレータ使わないよね?
あと、間違えがあって、
× v[i][j] = v[j][i];
○ v[i][j] += v[j][i];
イテレータを使わないとしたら、
インデックスになると思いますが、インデックスは
unsigned intではなかったら何を使うと良いでしょう。
さらに、このコードがクソ過ぎると思われた方は、
根本的に添削していただけると助かります。
0822デフォルトの名無しさん
2010/07/29(木) 15:44:18別に無理して使うものではないんだよ。価値を感じる(理解)人が使えばいい。
コンテナであればベクターであろうがリストあろうが同じコードで処理できるんだよ。
こういう抽象化に興味がない人には無用の長物。
コンテナを逆順に走査する必要があったときにリバースイテレータを使えば、
正順と全く同じコードで逆順が実現できる。
この辺の意味がわからん人が無理して使うような物でない。
0823デフォルトの名無しさん
2010/07/29(木) 15:49:08いや、そうじゃなくてさ
for(std::size_t i = 0; i < v.size(); ++i)
の例に「イテレータ使えよ」と言っただけなのに
なんで>>818みてーな例だして噛み付いてきてんの?アホなの?
0824デフォルトの名無しさん
2010/07/29(木) 15:55:15すまん。C++始めて2週間なのです。アホです。
どんな場合でもイテレータは使えるのかと本気で期待しました。
が、数値計算的なことには無力と分かって良かったです。
>>822
もっと抽象的な処理で有効ということですね。
ありがとうございます。
0825デフォルトの名無しさん
2010/07/29(木) 15:55:20if文無駄じゃね?
0826デフォルトの名無しさん
2010/07/29(木) 15:55:36>イテレータ万能というように言う人が結構いたので、
多分意味を取り違えてる。
>これはイテレータ使わないよね?
やりたいことはベクター(配列)であることが絶対条件だし、
配列のインデックスでアクセスしたいんだから、素直にインデックスでアクセスしろよ。
>根本的に添削していただけると助かります。
if 文使う必要もないでしょ。普通のプログラマなこんなコードは書かない。
0827デフォルトの名無しさん
2010/07/29(木) 15:59:26>が、数値計算的なことには無力と分かって良かったです。
全然理解できてないぞw
0828デフォルトの名無しさん
2010/07/29(木) 16:02:08そうだね。まあListなら使うしかなさそうだけど。
stlのバグ見つけたときから過信して何でも使わないようにしてる。
0829デフォルトの名無しさん
2010/07/29(木) 16:15:58現在位置ならstd::distanceで求めれば?
0830デフォルトの名無しさん
2010/07/29(木) 16:26:050831デフォルトの名無しさん
2010/07/29(木) 16:30:50ありがとうございます。STLは奥深いですね。
勉強します。
0832デフォルトの名無しさん
2010/07/29(木) 16:38:44それでいい、今の君には無用の長物
0833デフォルトの名無しさん
2010/07/29(木) 16:54:54気になるのでどの辺がつっこみどころなのか教えてくれませんか
0834デフォルトの名無しさん
2010/07/29(木) 17:18:270835デフォルトの名無しさん
2010/07/29(木) 17:27:36気にしない方がいいよ。
>>830 は size_type を使うように誰かに教わって、それが全てだと思い込んでいるのだろうw
0836デフォルトの名無しさん
2010/07/29(木) 17:40:32彼自身も知りたがってるとは考えられないのか?
0837デフォルトの名無しさん
2010/07/29(木) 18:58:51イテレータで…という質問の答えにはならないけどこうかな
// boost-ublas
auto u = triangular_adaptor<decltype(v), upper>(v);
auto su = triangular_adaptor<decltype(trans(v)), strict_upper>(trans(v));
auto value = u + su;
確かにイテレータは行列や四元数なんかのアクセスには適当じゃない
行列は行列で別の抽象化の技法があるのでそっちを使えばいいんじゃないかな
0838デフォルトの名無しさん
2010/07/29(木) 19:17:19すげっ、けど変態
0839デフォルトの名無しさん
2010/07/29(木) 19:30:080840デフォルトの名無しさん
2010/07/29(木) 20:26:270841デフォルトの名無しさん
2010/07/29(木) 20:37:190842デフォルトの名無しさん
2010/07/29(木) 20:45:58それは添字演算子
0843デフォルトの名無しさん
2010/07/29(木) 21:28:550844デフォルトの名無しさん
2010/07/30(金) 00:53:060845デフォルトの名無しさん
2010/07/30(金) 01:15:280846デフォルトの名無しさん
2010/07/30(金) 05:11:20std::is_enum
0847デフォルトの名無しさん
2010/07/30(金) 12:01:540848デフォルトの名無しさん
2010/07/30(金) 12:06:310849デフォルトの名無しさん
2010/07/30(金) 14:38:20おお、こんな関数がありましたか。
ちなみに0x以前にもあります?
0850デフォルトの名無しさん
2010/07/30(金) 21:30:400851デフォルトの名無しさん
2010/07/30(金) 21:54:520852デフォルトの名無しさん
2010/07/30(金) 22:09:270853デフォルトの名無しさん
2010/07/30(金) 22:20:48ベクタはメモリが一本だから、旧来のファイル等のAPIに使える。
キューは順番が必要なとき使う。
デキューは上記のとき意外で使う。
俺は特に制約が無いときはデキュー使ってる。
細かくアロケートしてメモリ効率よさそうだからな。
0854デフォルトの名無しさん
2010/07/30(金) 23:05:40シーケンスの両端への挿入/削除が多ければdeque
そうでないならvector を使えと規格には書いてある
queueとstackはその名のとおりだが用途に悩むくらいなら使わなくていいと思う
どうせ中身はdequeだし
規格には- の参照先はこちら↓
http://www.kuzbass.ru/docs/isocpp/lib-containers.html#lib.sequence.reqmts の 2
0855デフォルトの名無しさん
2010/07/31(土) 14:01:34やるにはどうしたらできますか?
0856デフォルトの名無しさん
2010/07/31(土) 14:06:290857デフォルトの名無しさん
2010/07/31(土) 14:07:30wchar_t a = L"あいうえお";
std::wstring b = L"かきくけこ";
wprintf(L"%s %s\n",a,b.c_str());
とかやればいいんじゃないの
0858デフォルトの名無しさん
2010/07/31(土) 14:08:210859デフォルトの名無しさん
2010/07/31(土) 14:11:58教えてください。
0860デフォルトの名無しさん
2010/07/31(土) 14:18:580861デフォルトの名無しさん
2010/07/31(土) 14:59:230862デフォルトの名無しさん
2010/07/31(土) 16:10:470863デフォルトの名無しさん
2010/08/01(日) 00:24:36ID番号を持たせたいです。
0864デフォルトの名無しさん
2010/08/01(日) 00:37:32を使って
"あああああ"を"(1)(2)(3)(4)(5)"
のようにマッチする度に値を変化させて置換する方法ってありますか?
0865デフォルトの名無しさん
2010/08/01(日) 00:38:42なにを困ってるかわからん。くわしく
0866デフォルトの名無しさん
2010/08/01(日) 00:40:56{
virtual int id = 0;
}
のようなこと
0867デフォルトの名無しさん
2010/08/01(日) 00:51:520868デフォルトの名無しさん
2010/08/01(日) 01:10:300869デフォルトの名無しさん
2010/08/01(日) 01:10:370870デフォルトの名無しさん
2010/08/01(日) 01:14:17策定に私を参加させなかったのが裏目に出ましたね
0871デフォルトの名無しさん
2010/08/01(日) 01:16:36どんな動作を期待してるんだよ
0872デフォルトの名無しさん
2010/08/01(日) 01:23:210873デフォルトの名無しさん
2010/08/01(日) 11:09:33……
case func() : // コンパイルできない
……
なぜcaseのところにfuncが入らないのでしょうか?
0874デフォルトの名無しさん
2010/08/01(日) 11:11:28constじゃなくconstexprを付けないとだめ
0875デフォルトの名無しさん
2010/08/01(日) 12:06:550876デフォルトの名無しさん
2010/08/01(日) 12:16:17int GetFive() { return 5; }
int some_value[GetFive() + 5]; // 10 要素の整数配列を作りたいが、C++ では不正。
GetFive() + 5 が定数式でないため、これは C++ では不正となる。
実際には GetFive は実行時に一定値を返すが、
コンパイラにそれを知らせる方法がないのである。
理論上、関数はグローバル変数に影響を与える、
実行時に結果が変わる他の関数を呼ぶ、などの理由がある。
0877デフォルトの名無しさん
2010/08/01(日) 13:19:13constにconstexprの機能を持たせた場合予想される弊害を答えなさい。
0878デフォルトの名無しさん
2010/08/01(日) 13:27:44どこにつけるconstについてか述べなさい
0879デフォルトの名無しさん
2010/08/01(日) 13:28:380880デフォルトの名無しさん
2010/08/01(日) 13:29:53switch(x)
{
case func1(): goto L1;
case func2(): goto L2;
}
goto L3;
L1: //func2() が実行されたかどうかわからない
L2: //func1() が実行されたかどうかわからない
L3:
# 配列やグローバルの話に飛ぶ必要はない
0881デフォルトの名無しさん
2010/08/01(日) 13:40:29case func():
...
// a.cpp
const int func() {
return ...;
}
// a.h
const int func();
constが付いていてもコンパイル時定数ではないのでNG
0882デフォルトの名無しさん
2010/08/01(日) 13:51:07>ほにゃららが実行されたか分からない
分からなくていい場合は?
>>881
>constが付いてもいてもかくかくしかじか
コンパイル時定数ではなくてもいい場合は?
C++より自由に何でも書けてプログラマーの思考を阻害することなく、そのまま表現できる言語ないですか?
0883デフォルトの名無しさん
2010/08/01(日) 13:53:14ただしcaseラベルはコンパイル時定数でなければならない
0884デフォルトの名無しさん
2010/08/01(日) 16:26:47C++にこだわりがないのなら、RubyとかPythonとかを使えばいいじゃない
0885デフォルトの名無しさん
2010/08/01(日) 16:46:59今はModern C++ Designを読んでるけど、なにこの変態言語…
みんなC++の言語仕様を全部理解して使ってるの?
0886デフォルトの名無しさん
2010/08/01(日) 16:49:470887デフォルトの名無しさん
2010/08/01(日) 16:51:120888デフォルトの名無しさん
2010/08/01(日) 16:53:22C++0xでぐぐるともっと幸せになれるよ!
0889デフォルトの名無しさん
2010/08/01(日) 16:53:500890デフォルトの名無しさん
2010/08/01(日) 20:07:37わからなくていいかどうかを、コンパイラに通知する方法を思いついたら禿にでも相談してみては?
0891デフォルトの名無しさん
2010/08/01(日) 20:54:47> 分からなくていい場合は?
if文使えばいいでしょ。バカなんじゃないの?
0892デフォルトの名無しさん
2010/08/01(日) 21:20:330893デフォルトの名無しさん
2010/08/01(日) 21:27:05お前のところはなんでもありでやってるのか
0894デフォルトの名無しさん
2010/08/01(日) 21:32:36新しい機能使うときは当然慎重になるべきだが規約で縛る必要はないと思う。
0895デフォルトの名無しさん
2010/08/01(日) 21:36:15アホプログラマーが好き勝手にやらかすのを黙って見てるのはもっとアホだろ。
0896デフォルトの名無しさん
2010/08/01(日) 21:40:52規約を定期的に見直す作業するならいいけど、
そんな余裕はないだろうから規約制限しない方がいいと思ってる。
0897デフォルトの名無しさん
2010/08/01(日) 21:44:41・制限しない方がいい
・定期的に見直すべきだ
・新しい機能使うときは当然慎重になるべき
全部矛盾してるぞ。
0898デフォルトの名無しさん
2010/08/01(日) 21:47:120899デフォルトの名無しさん
2010/08/01(日) 21:49:02第一義的には制限するべきではないが機能追加には慎重になるべき。
稼動実績ないわけだから当然だよなw
仮に定期的に規約見直すならば、制限してもいいかなといっている。
0900デフォルトの名無しさん
2010/08/01(日) 21:49:270901デフォルトの名無しさん
2010/08/01(日) 21:50:05慎重になるかどうかはプログラマーによるわけで、慎重にならないバカなプログラマーが出ないように規約で制限してんだろ。
0902デフォルトの名無しさん
2010/08/01(日) 21:51:06だめだこりゃ。なんで規約があるのかを考えろよ
0903デフォルトの名無しさん
2010/08/01(日) 21:51:41リーダーが責任を負うレベルでの話だよwww
0904デフォルトの名無しさん
2010/08/01(日) 21:53:27規約の意味とか論理飛躍も甚しすぎるんだがwww
0905デフォルトの名無しさん
2010/08/01(日) 21:55:59どのレベルでとか誰が判断するんだ?
ひとつの問題あって、それが個人レベルかリーダーレベルか。
そういうどうでも良い問題を避けるためにも規約は必要。
定期的に規約を見直すのは必要なことだが、出来ないなら規約はいらないというのは根本が間違っている。
0906デフォルトの名無しさん
2010/08/01(日) 21:57:000907デフォルトの名無しさん
2010/08/01(日) 22:03:03ぶっちゃけプログラマなんて何の責任もないんだがw
問題起きたらプロジェクトリーダーが全て責任を追わなきゃいけないのは当然だろw
オマエはそのレベルの立場の人間じゃないのか?
規約の見直し作業を仕事に組み込む余裕なんてないから無理だろって言ってるんだけどな。
なんか話がまとまらないしスレチ言われたからもうやめる。
0908デフォルトの名無しさん
2010/08/01(日) 22:07:56レス数が900を超えています。1000を超えると表示できなくなるよ。