1read 100read
2011年10月1期プログラムC++相談室 part93 TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
くだすれFORTRAN(超初心者用)その5
やってて楽しいプログラミング言語は? 3言語
IS<インフィニット・ストラトス>総合
くだすれPython(超初心者用) その12


C++相談室 part93


1 :11/12/27 〜 最終レス :12/01/12
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part92
http://toro.2ch.net/test/read.cgi/tech/1320339482/
このスレもよろしくね。
【初心者歓迎】C/C++室 Ver.77【環境依存OK】
http://toro.2ch.net/test/read.cgi/tech/1323692486/
■長いソースを貼るときはここへ。■
 http://codepad.org/
 http://ideone.com/

2 :
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
 http://en.cppreference.com/w/cpp (英語)
 http://ja.cppreference.com/w/cpp (↑の日本語訳だけどまだ未完)
[Stroustrup]
 http://www2.research.att.com/~bs/
[C++ International Standard]
 http://www.iso.org/iso/iso_catalogue/catalogue_ics/catalogue_detail_ics.htm?csnumber=50372
[JTC1/SC22/WG21 - C++]
 http://www.open-std.org/jtc1/sc22/wg21/
  ここから規格の最新ドラフトがダウンロードできる。
[JIS X3014]
 http://www.jisc.go.jp/app/pager?%23jps.JPSH0090D:JPSO0020:/JPS/JPSO0090.jsp=&RKKNP_vJISJISNO=X3014
  ISO規格の日本語訳。JIS X3014:2003はISO/IEC 14882:2003 (E)に対応。

3 :
■Libraries■
[Boost]
 Boost http://www.boost.org/
 (日本語) http://www.kmonos.net/alang/boost/
 (日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
 SGI-STL http://www.sgi.com/tech/stl/
 STLport http://stlport.sourceforge.net/
 GNU libstdc++ http://gcc.gnu.org/libstdc++/
 Apache C++ Standard Library (STDCXX) http://stdcxx.apache.org/
 STLFilt http://www.bdsoft.com/tools/stlfilt.html
 (日本語) http://episteme.wankuma.com/stlprog/ (※1999年発行注意)
[Loki]
 http://sourceforge.net/projects/loki-lib/
 LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

4 :
■Books■
amazon C,C++関連書籍
 http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
 http://www.amazon.co.jp/b/?node=754384
The C++ Programming Language
 http://www.amazon.com/exec/obidos/ASIN/0201700735/
 http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
 http://www.amazon.com/exec/obidos/ASIN/0201824701/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
 http://www.amazon.com/exec/obidos/ASIN/0201379260/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
 http://www.amazon.com/exec/obidos/ASIN/0201924889/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
 http://www.amazon.com/exec/obidos/ASIN/020163371X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/0201615622/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
 http://www.amazon.com/exec/obidos/ASIN/020170434X/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714833/ (翻訳)
Exceptional C++ Style
 http://www.amazon.com/exec/obidos/ASIN/0201760428/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)

5 :
■Books(Templateまわり)■
Effective STL
 http://www.amazon.com/exec/obidos/ASIN/0201749629/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
 http://www.amazon.com/exec/obidos/ASIN/0201704315/
 http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
 http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
 http://www.amazon.com/exec/obidos/ASIN/0321227255/

6 :
テンプレここまで。あと続けたい人は好きにして。

7 :
STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?
#include <stdafx.h>
後。
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

8 :
>>6
まだ終わってないぞ
壁紙にしてね!
ttp://www2.research.att.com/~bs/Bjarne.jpg

9 :
おつ

10 :
>>7は根強い人気だな
そう言えばランタイムライブラリのDLLって
テンプレートでも std::vector<int> とか基本的なものくらいは
含んでたりするんだろうか?

11 :
テンプレートはないだろ

12 :
本当にテンプレートを使ったことがあれば、
exportが無謀って事はすぐにわかるだろ。

13 :
friendクラスとクラス内クラスってどういった違いがあるんでしょうか
class Hoge {
friend class FactoryA;
class FactoryB;
private:
Hoge(int init);
// ry
};
class FactoryA {
private:
int i;
public:
FactoryA(void) : i(0) { }
Hoge * Create(void) { return new Hoge(++i); }
};
class FactoryB {
private:
int i;
public:
FactoryB(void) : i(0) { }
Hoge * Create(void) { return new Hoge(++i); }
};
パッと見どちらとも同じような気がするのですが

14 :
コンパイル通らんだろそれ

15 :
静的に関数を呼びだせば体が空の関数は最適化によって
何も無いようになりますか?

16 :
>>15 コンパイラの実装や設定次第。試せ。

17 :
C++0xに関数を定数にする機能あったじゃないですか?
それ使えば出来ませんか?
factoryをテンプレート型として
体が空のときはその機能を使い
factory.a()は右辺値の定数だから
何もすることが無いみたいなこと
なりませんか?

18 :
constexprはコンパイルタイムにガーッと計算して結果を埋め込む機能だけど。
小さい関数はインライン展開を期待したほうがいいんじゃないか?

19 :
>>15,17
最適化するもなにも、空の関数はそもそも何もしないので、
ちょっと何言ってるかわからないですね。

20 :
空の関数はスタックに引数を詰んだりするんですよ?

21 :
>>20 >>16

22 :
くだらないこと言ってないでさっさとアセンブラコード見ればいいと思うの
tmp> g++ -S test.cc && cat test.s

23 :
struct A{
typedef int type;
};
struct B : A{
type a;
} b;
&bと&(b.a)が同じアドレスをさしてほしいのですが
データメンバのないクラスを継承したときに
サイズが増えないようにする方法はありませんか?

24 :
データメンバがなく
関数だけが定義してあるクラスを複数継承したら
サイズがどんどん増えていってしまいました。
ttp://sites.google.com/site/boostjp/tips/operators
これとは少し違うのですが、これも演算子だけが定義してある
クラスを継承していると思うのですが
この場合はサイズが増えてしまうのでしょうか?
それとも増えないようにする方法があるのでしょうか?

25 :
>>23
Aは空クラスなのでサイズ1
Bは変数があるからそのサイズになる
なのでサイズは必ず増える

26 :
あと、Aは継承時にはサイズ0として扱われるはずなので、
&b == &b.a
になると思うんだが

27 :
0にするかどうかはコンパイラの最適化次第じゃなかったか

28 :
>>23
template <class Derived> class A {
protected:
~A(void) { }
public:
typedef int type ;
} ;
class B : public A<B> {
public:
type a ;
} ;
とりあえずこう書いてあとはコンパイラの気分しだい

29 :
空クラスであるにもかかわらず
継承時にサイズが0として扱われない条件というのがあるのでしょうか。
情報の後出しになってしまい申し訳ないのですが
template<typename T>
struct ptr_convertable{
operator T*(){
return *(T**)this;
}
};
struct my_int_ptr : ptr_convertable<int>{
int *p;
};
int a;
my_int_ptr b;
b.p = &a;
int *c = b;
こういう感じのことをやろうとしています。

30 :
struct A{};
struct B : A{};
struct C{ operator int(){} };
struct D : C{};
struct E : B, D{};
struct F{int a;};
struct G : F{};
struct H : E, G{};
struct I : G, E{};
int a = sizeof(A); //1
int b = sizeof(B); //1
int c = sizeof(C); //1
int d = sizeof(D); //1
int e = sizeof(E); //1
int f = sizeof(F); //4
int g = sizeof(G); //4
int h = sizeof(H); //5
int i = sizeof(I); //5
クラスの内容にはあまり関係ないようです。

31 :
すいません、更新せずに書き込んでしまいました。
>>27 >>28
protectedデストラクタを書いてみましたが結果は変わりませんでした。
変換対象のクラスが多いので、こうすれば1行で書けるかと思ったのですが
なんか別の方法はないでしょうか。
マクロであきらめようかな。

32 :
>>31
多重継承で親が重なる場合に増えてるね。

33 :
まさか関数ってvirtualの?
それだと仮想関数テーブルの分どんどん増えると思うけど。

34 :
>>20
最適化してバックトレースとってみ。
リンケージが同じなら消失するから。

35 :
>>29
つかアドレス一緒にして何するつもりよ

36 :
>>32
> 多重継承で親が重なる場合に増えてるね
全ての基底クラス部分を区別できる形で表現できる必要があるからな。
struct B {};
struct D1 : B {};
struct D2 : B {};
struct D12 : D1, D2 {};
D12 * pd12 = new D12; // 1
D1 * pd1 = pd12; // 2
D2 * pd2 = pd12; // 3
B * pbd1 = static_cast<D1 *>(pd12); // 4
B * pbd2 = static_cast<D2 *>(pd12); // 5
1と2,3は型が違う。4,5は型が同じなのでアドレスを変えて違いを出す。

37 :
何かトリッキーな事でもしたいんじゃね
C++はどうしてもCより抽象度が高くなるからアドレス関係をいじると
あまり無茶は出来ないよな

38 :
平松邦夫/民主党
大阪市役所・自治労・大阪市労働組合・日教組・大阪市教育委員会・自民党・共産党・社民党・関西電力・住友グループ
・毎日放送・毎日新聞・関西経済連合・日本原子力発電株式会社 ・ 週刊文春・週刊新潮・NHK・朝日新聞・読売新聞
・解放同盟・朝鮮総連・在日本大韓民国民団・日本遊技関連事業協会・全日本遊技事業協同組合連合会・日本弁護士連合会・生活保護受給者・反日左翼・9条の会・革マル派・中核派
VS
橋下徹/維新の会
大阪市民・みんなの党・国民新党・亀井静香・石原慎太郎・東国原英夫
 様子見:公明

39 :
>>12
exportじゃなくて明示的実体化の話だよ

40 :
>>39
それとDLLだけとじゃさっぱり分からんのですけど。

41 :
>>40
明示的な実体化を行うと、別リンケージに関数の実体が生成される。
DLLでも同じ話。実体がある以上他のDLLやEXEで使用できる。
てか、このへんは初歩的な話じゃ・・・

42 :
>>29
それ、結局派生側の指定位置に生の T* をメンバで持つことを強要してんじゃん。
ptr_convertable が T* 持てば全て自然に解決する話じゃないの?

43 :
>>37
CにできてC++にできないアドレス操作なんて無いだろ。

44 :
>>43
いやそういう意味じゃない
Cだと構造体の中に何かを入れて後から伸ばすとか割りと見えやすかったけど
C++のクラスで同じ事をしようとすると仮想関数やら大きさ最低1バイトの縛りやら
あと継承なんかしていたら伸ばそうとした途端に他のメンバが壊れたり
いろいろ気を使うという事を言いたかった

45 :
>>44
配列以外のアドレス(ポインタ)加減算がCなら安全なことがあると思ってるんなら
おおかたただの勘違い。規格上認められる操作は大差ない。
たまたまプログラマの間違った期待どおりに動いてしまうことがCのほうがいくらか
多い(C++のほうがいくらか少ない)というだけのこと。
実際の違いと言えるところとして可変長配列と構造体中の 0 長配列メンバがあるけど、
それらも「抽象度」がどうのこうのではない。
http://seclan.dll.jp/c99d/c99d04.htm

46 :
そうなのか
vtableとかどこにくっついているか実装依存なので扱いにくいのではと思ったんだけど

47 :
>>46
vtable以外にも、オブジェクトのレイアウトに関して実装依存なことはパディングやら
アライメントやらCの範囲でもいくらでも考えられるからね。
http://www.kouno.jp/home/c_faq/c16.html#5
> 16.5: このプログラム、あるマシンではうまく走るのに、別のマシンだと変 な結果を返す。もっと変なことに、デバッグ用の出力を付けたり外し たりすると症状が違ってくる。
> A: おかしくなる可能性のあるものはたくさんある。以下に可能性の高い ものをいくつか示す。
...
> 対象となる具体的なシステムで コードの生成されかたを決 め付けて、こういう使いかたを考え付くとは俺って頭がいい なと思っていることはなんでも

48 :
Cは継承や仮想継承、仮想関数がないからそれだけでもC++よりは扱いやすい
構造体だと思ったんだが
>>47のリンクは知ってる
トリッキーな事をすると必ずリスクは付いて回る
しかしC++はそのトリッキーな事が致命的な結果をもたらす率が高いと思う

49 :
>>45
反応する所が違うだろ
クラスに対してトリッキーな事(強制キャストが必要な操作)を
すんなってのが要点なんだから。
別にPODなコードは絶対安全とかそんな話を
してるわけじゃないだろ。

50 :
>>49
まあいいだろ
俺は前スレからの流れで書いたつもりだったんだが汲んでもらえなかったようなので
クラスはPODにいろいろ厄介な物が(もちろんメリットの方が遥かに大きいが)付いているので
あまり変な事はしない方がいいよって意味で書いた
PODも規格外の事をすれば当然危ない
当たり前の事だよな

51 :
無茶なキャストやアドレス操作をすることを前提にして
問題を起こす率の高い低いを考える意味がわからんな。
まぁ「思う」のは自由だよね。

52 :
>>10
文字列関係は大体入ってた。complexやnumeric_limitsなんかも入ってることはあるな。

53 :
>>51
いやだから「規格外」である事は承知で、Cで無茶をして動かしている例はいくらでもある
プログラム組んだ事ないのか?
でもC++でそれをやろうとするとほとんど不可能になると言いたいだけの話
お前アスペだろ

54 :
C++でも規格外なコードは書けるし書かれまくってるだろ
ラップするから見えないだけで

55 :
駄目だこいつ
相手しないでおこう

56 :
>>55
>>55

57 :
56 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん

58 :
57 名前:[sage] 投稿日:臭い

59 :
>>47
そういや、vtableなんてポインタじゃ無くても実装できるしな。
動的リンクを考えなきゃ、コンパイラが全てのクラスのvtableを
直列した配列にして、オブジェクトには、その配列のオフセットを
持たせるだけってのでもいいわけだしな。

60 :
仮想関数のテンプレート化はできないんでしょうか?
class Hoge {
public:
template <class Iterator>
virtual void Func1(Iterator begin, Iterator end) = 0 ;
template <class Inserter>
virtual void Func2(Inserter inserter) const = 0 ;
} ;
class HogeEx : public Hoge {
std::vector<int> v;
public:
template <class Iterator>
void Func1(Iterator begin, Iterator end) { v.assign(begin, end); }
template <class Inserter>
void Func2(Inserter inserter) { inserter = v.front(); }
}
みたいな感じで主にイテレーター関係やファンクタを引数に取る関数で使いたいんですけど

61 :
ああそれね。そういうのウチはやってないから。

62 :
何か朝から頭のおかしい粘着がいるなあ
>>60
標準C++の仕様では出来ないけど、boostを使うとそれらしいのは出来るみたい
http://d.hatena.ne.jp/moriyoshi/20090727/1248697647

63 :
>>62
それっぽくできました
ありがとうございます

64 :
相談
C++(C)でdllのリソースファイルとして.txtファイルを埋め込んで、そこから文字列を取り出すにはどうしたらよいですか?
検索しても出てこないのはもしかして当たり前のこと過ぎるからでしょうか・・・

65 :
C/C++にそのような機能はないのでなんらかのAPIを使う

66 :
>>64
ID_SAMPLE     TEXT_DATA         DISCARDABLE     "text.txt"
リソース名       リソースグループ  DISCARDABLE      "ファイル名"
http://www.sm.rim.or.jp/~shishido/rctest.html

67 :
WindowsならWin32スレいけ、っていえるほどあそこいいところじゃないからとりあえずはっとく
BOOL CALLBACK 探すコールバック( HMODULE hModule, LPCWSTR lpType, LPWSTR lpName, LONG_PTR lParam )
{
 HRSRC hrsrc = FindResource( hModule, lpName, lpType );
 if( hrsrc ) {
   void* data = LoadResource( hModule, hrsrc );
   if( data ) {
     hoge* pwork = (hoge*)lParam;
     strcpy( pwork->hage, data );
   }
 }
 return TRUE;
}
void 探す関数()
{
 hoge work;
 HMODULE hModule = LoadLibrary( "dllのパス" );
 if( hModule ) {
   EnumResourceNames( hModule, RT_STRING, 探すコールバック, (LONG_PTR)&work );
   FreeLibrary( hModule );
 }
}
あぁ、ファイル埋め込みならRT_STRINGじゃなくてRCDATAか

68 :
ありがとう

69 :
>>65
分からないのなら黙ってろよカス

70 :
>>65-67
ありがとうございます
なるほど、やはり一発でポンというのはないのですね
またわからないことが出来たらよろしくお願いします

71 :
複数の配列を合併してひとつの配列をつくりだすことに
もっとも適したデータ構造をおしえてください。

72 :
配列とそのポインタの配列。

73 :
RopeかFingerTreeあたりか

74 :
std::vector<std::vector<>>

75 :
2重配列のやつだと同じ要素が2つあるやつの合併は処理が困っちゃいますよね。

76 :
それは重くなる。
std::vector<std::vector<>*>にしとくべき。
ポインタだけならサイズ変更しても負荷は小さい。

77 :
普通、連結と言ったら要素は重複しても、単に前か後ろにつなげるだけだ。

78 :
>>71
vectorのリストがいいよ
先頭のベクタの長さをNとする
先頭を除いたベクタのリストの長さが合計で2Nに達したら
先頭を倍+αに伸ばしてそこに先頭を除いたベクタの内容をコピーして先頭以外を解放する

79 :
union-find木

80 :
要素の重複は削り、順序は無視して良いならstd::setに入れとけ。

81 :
mapで使えるやつがないな。
メモリ食いすぎる。
STLportがマシだが。
Googleとか頻繁に更新してるのにSTLportのメモリと速度に追いつけず。

82 :
同条件で比較したmapの性能。stlport_std::hash_mapが全てにおいて優れて他のやつ使う余地がないな。
stlport_std::hash_map
Insert Time: 8.859 sec. Search Time: 2.875 sec.
ページフォールト数: 11007 最大ワーキングセットサイズ: 42045.4KB
stlport_std::map
Insert Time: 12.265 sec. Search Time: 14.953 sec.
ページフォールト数: 11422 最大ワーキングセットサイズ: 46846.0KB
std::map VC9
Insert Time: 14.078 sec. Search Time: 13.953 sec.
ページフォールト数: 14323 最大ワーキングセットサイズ: 58740.7KB
stdext::hash_map VC9
Insert Time: 10.109 sec. Search Time: 7.5 sec.
ページフォールト数: 13922 最大ワーキングセットサイズ: 56836.1KB
google::sparse_hash_map ver.1.12
Insert Time: 51.921 sec. Search Time: 9.407 sec.
ページフォールト数: 11949 最大ワーキングセットサイズ: 48664.6KB
google::dense_hash_map ver.1.12
Insert Time: 10.14 sec. Search Time: 5.375 sec.
ページフォールト数: 29635 最大ワーキングセットサイズ: 82599.9KB

83 :
自分の環境はスペックであることは書いておかなければいけなかった。物理メモリが1ギガしかない。
消費メモリサイズには影響は無いと思うが、ページフォールトによる速度低下はあり得る。
google::dense_hash_mapなどはメモリ食うから、容量が大きいマシンでつかったら速度は一番になり得る。

84 :
これがコピペだと気付くのに時間かかった

85 :
コピペだけど自作データだが。

86 :
再試+テストコード公開よろ
ここに貼るのが無理でもblogの方にでも貼っていただければ

87 :
こんなのだが。map部分は書き換える。
#include <string>
#include <time.h>
#include <unordered_map>
#include <windows.h>
#include <psapi.h>
#pragma comment (lib, "psapi.lib")
using namespace std;
int InsertNum=500000, SearchNum=4000000; double timer();string strgen();void meminfo();
int main() {
tr1::unordered_map<string,int> hmap; int i; timer();
for(i = 0; i < InsertNum; i++) hmap.insert( make_pair( strgen(), i ) );
printf("Insert Time: %fsec.\n", timer());
timer(); for(int n=0; n<100; n++) {
string find = strgen();
for(i = 0; i <= SearchNum/100; i++) hmap.find(find); }
printf("Search Time: %fsec.\n", timer());
meminfo(); }
double timer() { static int n=-1; static unsigned int cl[2];
if(n==-1) { n=0; cl[0]=clock(); return 0; }
n=1-n; cl[n]=clock(); return (cl[n] - cl[1-n]+0.0)/CLOCKS_PER_SEC; }
unsigned int randxor() { static unsigned int t, x=123456789,y=362436069,z=521288629,w=88675123;t=x^(x<<11); x=y; y=z; z=w; return w^=(w>>19)^t^(t>>8); }
string strgen() { string str; for(int j = 0; j < 1+randxor()%4; j++) {
int r=randxor(); for(int n=0; n<32; n+=2) str+=(char)('a'+(r>>n)%4); }
return str; }
void meminfo() { PROCESS_MEMORY_COUNTERS memInfo = {0};
GetProcessMemoryInfo( GetCurrentProcess(), &memInfo, sizeof(memInfo) );
printf("ページフォールト数: %d\n", memInfo.PageFaultCount);
printf("最大ワーキングセットサイズ: %0.1fKB\n", 0.001*memInfo.PeakWorkingSetSize);
printf("最大ページングファイル使用サイズ: %0.1fKB\n", 0.001*memInfo.PeakPagefileUsage);}

88 :

| ┏━━━┓   従軍慰安婦は反日朝日新聞の捏造でした。
| ┃借収安┃    デマだらけの報道に注意しよう
| ┃三三婦┃
| ┃○○大┃
| ┃○○募┃
| ┃○圓集┃
| ┃圓以  ┃
| ┃迄上  ┃_
\┃可   ┃ \
  ┗━━━┛  \
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ |
http://img04.ti-da.net/usr/wishcomestrue/t02200190_0220019010786142693.jpg

89 :
stlportのhash<string>はあんまり質が良くないから気をつけたほうがいいかも

90 :
たまに衝突してもいいというマップだと省メモリ・高速にできるな。

91 :
listのmergeって内部のデータを盗むやつだから
新たにデータをつくりませんよね?
あと順序を維持したままというのはmergeすると
ソートが勝手に行われるということですか?
単純に後ろにくっ付けたいときはどうしたらいいですか?
あとdequeやvectorで2つのやつを新たなデータを作らずにマージできますか?

92 :
listはデータ構造的にたまたまそういうことができるだけ
STLのほかのコンテナでは無理
setやmapならできそうな気もするけどSTLには残念ながらそういう機能はない
ソートせずにくっつけたいだけならspliceを使う

93 :
配列のポインタを保持してそれでつなげ。
そしたら低負荷だ。

94 :
派生クラスのコンストラクタを自動でprotectedにするテクニックってありますか?
派生可能かつ生成関数を通じてのみ生成可能なクラス群を書きたいのだけど
いちいち全クラスにprotectedコンストラクタを書くのが面倒です
(例)
class X {
protected:
// CTORS
virtual ~X(void) {};
public:
static X * Create(void) { return new X; }
};
class Y : public X {
protected:
// CTORS
public:
static Y * Create(void) { return new Y; }
};
class Z : public Y {
private: // final的な意味で
// CTORS
public:
static Z * Create(void) { return new Z; }
};

95 :
配列の配列がdequeってかいてあったからマージできるとおもったけど
出来ないんですね。
おとなしくvector型の配列つくりますね。

96 :
>>94
無理じゃね
そもそも何でコンストラクターはダメで
Createならいいの?

97 :
>>96
enable_shared_from_thisとかその他のフックがついてる時
あるいはCreateでマネージャに登録などの他の処理もしてる時
とかですかね

98 :

http://cp2.uh-oh.jp/read_img/index/ab83e09400ff17d99f45ceee15a37e09.jpg
http://cp2.uh-oh.jp/read_img/index/a58c2ddc9cdbe45529ef0d58c95cc232.jpg
テレビに騙されるな(自称街の人-台本読んでるだけの業者)

99 :
寿命の管理の責任ははっきりしているけれど共有したいポインタがあるから
unique_ptrのweak_ptrみたいなものが欲しいのだけどそういうイディオムとかって有りませんか?

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
くだすれFORTRAN(超初心者用)その5
やってて楽しいプログラミング言語は? 3言語
IS<インフィニット・ストラトス>総合
くだすれPython(超初心者用) その12