もう18時か、
2ちゃんねる ■掲示板に戻る■ 全部 1- 最新50 [PR]無料のブラウザで出来るゲーム集[PR]  

C++相談室 part74

1 :デフォルトの名無しさん:2009/10/25(日) 00:22:58
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

前スレ
C++相談室 part73
http://pc12.2ch.net/test/read.cgi/tech/1254746834/


791 :デフォルトの名無しさん:2009/11/23(月) 01:12:06
これは意図どおりだよ

map<K, V> m;
// population
map<K,V>::iterator i3 = m.begin(), i4 = m.begin(), i11 = m.begin();
advance(i3, 2);
advance(i4, 3);
advance(i11, 10);
m.erase(i3);
m.erase(i4);
m.erase(i11);


792 :デフォルトの名無しさん:2009/11/23(月) 01:14:32
削除の前後で同一箇所を示すイテレータは変化しないって事か。

793 :デフォルトの名無しさん:2009/11/23(月) 01:19:26
イテレータを保存しておくとポインタの4倍要領食うな
これやると、4バイトと16バイトが出てくる。128bitも使う。

int main(){
int *p;
vector<int>::iterator q;
cout<<sizeof(p)<<" "<<sizeof(q);
}

794 :デフォルトの名無しさん:2009/11/23(月) 01:36:18
>>793
デバッグ用のチェック機能かなんか使ってるだろ。
release ビルドでも試してみた?

795 :デフォルトの名無しさん:2009/11/23(月) 01:53:32
コンパイラ依存みたいね。
vcだと8 bccだと16
ともにリリース版

796 :デフォルトの名無しさん:2009/11/23(月) 02:09:39
g++ は 4

VC++ のそれはセキュリティ重視ってことみたい。
http://msdn.microsoft.com/ja-jp/library/aa985965.aspx
#define _SECURE_SCL 0 なら 4 になるんじゃないかな?

797 :デフォルトの名無しさん:2009/11/23(月) 11:11:26
>>791
そんなことできたのか。

798 :デフォルトの名無しさん:2009/11/23(月) 13:30:21
ノードベースコンテナは要素のeraseしても他のイテレータを無効化しないはず。
順序性も常に保たれる。

799 :デフォルトの名無しさん:2009/11/23(月) 17:29:53
class hoge
{
const fuga &operator [] (size_t i)
{
if( i < 10 ) return f[i]; else return fuga();
}
private:
fuga f[10];
};

これって規格上でもセーフなの?

800 :デフォルトの名無しさん:2009/11/23(月) 17:33:55
>>799
関数が帰るタイミングでopereetaa []外にfuga()を渡すとopereeetaaaaa []のスタックが破壊されて存在しないconst referenceを返してしまうからだめ。
const referenceで受け取る事のできるテンポラリは破壊されてないスタック内のオブジェクトだけ。

801 :デフォルトの名無しさん:2009/11/23(月) 17:41:41
opereetaa
ヒドイww

802 :デフォルトの名無しさん:2009/11/23(月) 17:46:24
wmemcpyとwcscpyって何が違うの??

803 :デフォルトの名無しさん:2009/11/23(月) 17:47:41
>>1
>IDE (VC++など)などの使い方の質問はその開発環境のスレに
>お願いします。

804 :デフォルトの名無しさん:2009/11/23(月) 17:51:43
引数の数を数えるところから始めようか

805 :デフォルトの名無しさん:2009/11/23(月) 18:06:01
wmemmoveじゃなくてwmemcpyを使う理由って何?

806 :デフォルトの名無しさん:2009/11/23(月) 18:08:00
転送先が転送元と重なってないとき

807 :デフォルトの名無しさん:2009/11/23(月) 18:11:51
何もほかにコンストラクタ宣言してないのに規定のコンストラクタがないとか言われたんだけど
コンストラクタをオーバーロードする以外に自動生成が行われなくなる事ってあるの?


808 :デフォルトの名無しさん:2009/11/23(月) 18:12:54
>>807
メンバにデフォルトコンストラクタで済まないやつがいるとき。

809 :デフォルトの名無しさん:2009/11/23(月) 18:16:30
>>808
いちおうメンバクラスは全部デフォルト作ったんですが・・・

810 :デフォルトの名無しさん:2009/11/23(月) 18:18:57
じゃぁ基底クラスかな?
いっこずつ外して試してみれば?

811 :デフォルトの名無しさん:2009/11/23(月) 18:22:05
あ、解決しますた
const メンバがあるとコンストラクタ定義しないといけないっぽいですねこれ
そのくせコンストラクタ初期化士でconstメンバ初期化しなくても文句は言われないという不思議

812 :デフォルトの名無しさん:2009/11/23(月) 18:28:06
>>811
const メンバ持ってるぐらいでデフォルトコンストラクタの自動生成が効かなくなることは
無いはずなんだけど、何か勘違いしてない?

まぁ解決したって言うならいいんだけどさ。

813 :デフォルトの名無しさん:2009/11/23(月) 18:34:40
不定のまま変更禁止、という状況ができてしまうほうが話の筋としてはおかしいが

814 :デフォルトの名無しさん:2009/11/23(月) 18:36:56
>>813
その点に対する警告かもしれないとは思うが >811 の三行目なわけで

815 :デフォルトの名無しさん:2009/11/24(火) 01:11:03
コピーコストって何バイトぐらいから考える?
大体、どれくらいのバイト数を持ってたら単純なメンバ変数に実装する方法じゃなくて、
pimplとか考えればいいのかな
ライブラリ作ってるから、そのクラスが実際にどれくらいコピーされるかどうかは分からない。
std::stringみたいなもので、今のアプリで基盤になるクラスを書いてる。

816 :デフォルトの名無しさん:2009/11/24(火) 01:14:50
>>815
pimpl とか使うのはコピーコストを問題にするよりは実装を隠蔽するという目的が先にたつ。
ライブラリ作ってるなら、デフォルトでこっちと考えても問題ない環境が多いと思う。
隠蔽によるオーバーヘッドがボトルネックとして現れるまでヘッダに private メンバ変数を
晒すようなことはおすすめしない。

817 :デフォルトの名無しさん:2009/11/24(火) 01:36:08
structって地味にclassより楽じゃない?
public継承するときに
struct fuga {};
struct hoge : fuga {};
みたいに略すとpublicになってくれるのがうれしい

818 :デフォルトの名無しさん:2009/11/24(火) 01:59:14
ちゃうねん!pimplの話は今はちゃうねん!w
大体みんなどれくらいのサイズでコストを意識してるか知りたかったねん!


819 :デフォルトの名無しさん:2009/11/24(火) 02:06:34
>>815
コピーコストが気になるところでは利用者側でポインタや参照使えばいいんだから、
クラス作成者側の話として意識する意味がわからん。

820 :デフォルトの名無しさん:2009/11/24(火) 03:20:45
おまえらすげぇな・・・
そのレベルの処理コストちゃんと考えてやってるんだな。
そりゃ、線形探索はヤバイから、バイナリサーチするとか
そういうオーダーに多大に影響するレベルになるとやるけど、
そんなコピーコストとか細かいレベルの事はやらんわ。


821 :デフォルトの名無しさん:2009/11/24(火) 04:08:51
std::vector使うときって
どれが望ましいですか?
std::vector<string>
std::vector<string&>
std::vector<string*>


822 :デフォルトの名無しさん:2009/11/24(火) 06:10:13
みんなの話の筋とは
全然関係ないんだけど、面白かった。

 typename は何故必要か
  ttp://ray.sakura.ne.jp/template/typename.html

そういう理由でこの有名な仕様になっていたのか!。



823 :デフォルトの名無しさん:2009/11/24(火) 11:56:39
メンバがint一個しかなくても必要ならpimplにするし、
vector3個あってもpimplにしない(唯のstructにする)こともある。

824 :デフォルトの名無しさん:2009/11/24(火) 11:59:07
>>821
二番目は無理。
一番目と三番目は使い道が違う。

825 :デフォルトの名無しさん:2009/11/24(火) 13:04:18
継承したクラスはしてないクラスとくらべると遅くなりますか?

826 :デフォルトの名無しさん:2009/11/24(火) 13:06:39
仮想継承以外は静的に解決されるから
基底クラスで何もしなければ影響はない。

827 :デフォルトの名無しさん:2009/11/24(火) 13:08:38
基底で何もしない意味あるんですか?

828 :デフォルトの名無しさん:2009/11/24(火) 13:12:16
型レベルで何かする時に意味がある


829 :デフォルトの名無しさん:2009/11/24(火) 13:12:50
何かしてるじゃん
この場合は実行時に何かすると遅くなる、って言う意味だろ

830 :デフォルトの名無しさん:2009/11/24(火) 13:30:36
4つの兄弟のような機能が、まんべんなく混ざってるクラスを整理する為、
4つの仮想クラスに分割して実装したら、約15倍ぐらい遅くなったことがあったなあ
まあインライン展開されないなど、作りが悪かったんだが。

831 :デフォルトの名無しさん:2009/11/24(火) 13:35:11
もうちょっと分かり安く書いてくださいませんか?
インラインにしても遅いんですか?
私のやりたいのはiteratorを作っていてstlのiterator構造体を継承したら
遅くなるので自分で実装しようか検討中です。

832 :デフォルトの名無しさん:2009/11/24(火) 13:38:00
引数をメンバ変数に代入すると同時に、その値を引数にして
また別の関数を呼ぶとき、以下のどちらの書き方にするとか、ガイドラインありますか?
結構迷うんですけど。

CHoge::Func(int arg) {
 m_arg = arg;
 ::SomethingToDo(m_arg); // argはあくまでもメンバ変数を初期化するためのパラメータであり、それ以上の利用をしない感じ
}

CHoge::Func(int arg) {
 m_arg = arg;
 ::SomethingToDo(arg); // Funcが受けたargをそのまま次に渡すイメージ
}



833 :デフォルトの名無しさん:2009/11/24(火) 13:45:46
virtual class X;;
class A : X;
class B : X;
class C : X;

func()
{
A a; B b; C c;
std::vector< X* > v;
v.push_back(&a); v.push_back(&b); v.push_back(&c);
for_each( v.begin() -> v.end() ){ i->func(); }
}

擬似コードで書くけど、べた書きだったのを、
を純粋仮想クラスで↑みたいにしたら、
全然インライン展開されなくて、遅くなったって話。
それだけ。

834 :デフォルトの名無しさん:2009/11/24(火) 13:50:10
>>832
前者はm_argとSomethingToDoの間に依存関係が発生するから
パイプライン止まるんじゃねーの知らねーけど

835 :デフォルトの名無しさん:2009/11/24(火) 14:00:23
>>832>>834
しかし後者はm_argとFuncをメンバに持つ意味があるのかを問われかねない。

836 :デフォルトの名無しさん:2009/11/24(火) 14:11:43
C++で可変長の整数の作り方等が乗っている洋書を教えてください。

837 :デフォルトの名無しさん:2009/11/24(火) 14:16:10
洋書の話は洋書スレで!

838 :デフォルトの名無しさん:2009/11/24(火) 14:18:00
別に洋書しか載ってなさそうな内容なのでいってみただけで、
和書でもあればよろしい。

839 :デフォルトの名無しさん:2009/11/24(火) 14:19:31
http://ieeexplore.ieee.org/xpl/RecentIssue.jsp?punumber=18

840 :デフォルトの名無しさん:2009/11/24(火) 14:21:17
http://ieeexplore.ieee.org/xpl/freeabs_all.jsp?arnumber=1019854

193 KB [ 2ちゃんねる 3億PV/日をささえる レンタルサーバー \877/2TB/100Mbps]

■ おすすめ2ちゃんねる 開発中。。。 by FOX ★
このスレを見ている人はこんなスレも見ています。(ver 0.20)
【I-O】GV-MVP/H,Vシリーズ Part14【地デジ,BS,CS】 [DTV]
Virtual PC 2007 総合質問スレ(初心者歓迎) 2 [ソフトウェア]

新着レスの表示

掲示板に戻る 全部 前100 次100 最新50
名前: E-mail (省略可) :


read.cgi ver 05.0.7.8 2008/11/13 アクチョン仮面 ★
FOX ★ DSO(Dynamic Shared Object)