1 名前:デフォルトの名無しさん [2009/01/11(日) 11:13:44 ] C++標準ライブラリの一つ、STLについて。 前スレ 【C++】STL(Standard Template Library)相談室 10 pc11.2ch.net/test/read.cgi/tech/1219719677/ 過去ログ・リンク・書籍紹介は >>2 以降
136 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 22:33:29 ] >>133 たしかに規格上は保証がないかもしれないが、なんだか屁理屈に聞こえる。
137 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:43:39 ] >>136 同感だな 内部状態を持つ関数オブジェクトって普通にありえるからな なんか現実を無視して重箱のすみを突いているって感じだな
138 名前:デフォルトの名無しさん mailto:sage [2009/02/23(月) 23:53:59 ] いや、これははまるぞ 移植してバグったとき、大変そうだ
139 名前:デフォルトの名無しさん [2009/02/24(火) 00:01:50 ] ん? マッサーの STL 本では generate のサンプルで内部状態を保持しているし メイヤーズの Effective STL でも、関数オブジェクトの利点は 「必要に応じていくつでも状態を格納できること」と書いてるぞ?(たとえば p.161 ) 述語は純粋関数でないとだめだけど。 サッターの C++ Coding Standardsでは 「述語は関数オブジェクトの部分集合である」( p.172 )としていて すなわち述語でない関数オブジェクトは純粋関数でなくても良いということになってるぞ? どっちなんだ。
140 名前:デフォルトの名無しさん [2009/02/24(火) 00:05:52 ] ちなみに、generate の第三パラメータは述語ではないので、 (マッサー、メイヤーズ、サッターの本にあるとおり) 純粋関数でなくても良いということになる。
141 名前:デフォルトの名無しさん [2009/02/24(火) 00:12:15 ] 今、シルトの本も調べてみたが、やっぱり関数オブジェクトの利点として 「値を格納したり、追加機能を実装できる」( p.230 )と書いてるな。
142 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:12:48 ] すまん、全部 age ちまった・・・ orz
143 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:44:58 ] vectorの連続性と一緒だな 普通はコピーなんてしないし、規格作った方もそんなつもりじゃなかったけど ちゃんと書いてないせいで信用できないし、コピーしちゃう実装を誰かが作っても責められない そんな誰も得しない状態 0xで直るんかね
144 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 00:52:16 ] vectorの格納領域は「必ず」連続するようになったのは1998年以降だから まぁ、いまどきのコンパイラならもう必ず連続すると考えていいんじゃないの。
145 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 11:38:30 ] std::vector<int> v; v.reserve(10); ... // v に値を格納 std::copy(v.begin(),v.end(),std::ostream_itreator<int>(std::cout,",")); このコードの copy 内の ostream_iterator... の部分て何を行っているのですか? コンテナの要素をループで書き出してるのは分かるのですが、内部でどのような処理をしているのでしょう?
146 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 12:43:55 ] >>138 俺もはまった boost::refして誤魔化した
147 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 12:53:46 ] ええ、どこのベンダだよ
148 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 16:00:32 ] vectorの格納領域と同じで、標準化委員会がどっかで修正コメントだしてないのかな?
149 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 16:14:34 ] >>130 俺なら output_iterator を受け取る関数を作って back_inserter を渡す。 std::vector なら reserve してからね。 >>133 良くないのはそうだけど、総和とかには使うし、命名とかコーディングスタイルの話になるんじゃないか?
150 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 18:48:24 ] >>146 それどこのSTLライブラリ? で、どんなコードではまった?
151 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 20:48:17 ] >>149 ライブラリの内部実装の話を命名やコーディングスタイルでどうするの?
152 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:49:33 ] >>145 ttp://msdn.microsoft.com/ja-jp/library/0c6y7x31(VS.80).aspx
153 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 00:08:40 ] >149 総和系なら accumulate があるべ。
154 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 08:55:19 ] 状態を持つと並行処理できないじゃないか。 なーんてね
155 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 09:03:23 ] >>151 内部状態を持つ関数オブジェクトを使う話で、内部実装の話はしてないよ。 使わないほうがいいけど、使うなら注意を喚起するとか、専用の関数を作って封じ込めるとか、という話。 >>153 全くその通りでした。
156 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 19:52:40 ] mapは構造体をキーに持つことができないのでしょうか? 具体的には、mapを使って2枚の画像の対応点を記録しようとしています。 typedef struct point { int x; int y; }point; map<point, point> correspond; point p1, p2; /*p1とp2の座標を入力*/ correspond.insert( pair<point, point>(p1, p2) ); としてコンパイルするとerror C2784が出ます。 環境はVS2008、XP SP3を使っています。 どうしたら解決できるでしょうか?
157 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:04:06 ] エラーの内容から二つのpointを比較できないコードであるということがわかるので、mapの為に比較関数を用意する。 方針としては、グローバルにpointの大小を判別するbool operator<(const point&, const point&)を定義するか、 correspondの宣言の歳にmap<point, point, compare_t> correspond(compare);とする (ただしcompare_tは戻り値boolで引数に(const point&, const point&)を取ることができる関数オブジェクトまたは関数の型で compareはそのインスタンス)
158 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:25:45 ] >>157 素早い回答ありがとうございます。 pointのxとyどちらでソートすべきか比較関数を用意してやればよいということでしょうか?
159 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:32:21 ] うん、例としては bool f(const point& lhs, const point& rhs){ return lhs.x < rhs.x && lhs.y < rhs.y; } のようなものを定義して map<point, point, bool(*)(const point&, const point&)> correspond(f); かな? operator<を使う方法についてはeffective C++とか参考にすれば、 綺麗に実装する方法が載ってると思う
160 名前:デフォルトの名無しさん mailto:sage [2009/02/25(水) 20:39:54 ] >>159 具体例までありがとうございます。 map 比較関数 でググったらいくつか例も出てきたので出来そうです。 よく考えるとmapは2分木を利用してるんだから自前の比較関数を用意してやる必要があるのは当たり前ですね。 勉強になりました。
161 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:33:14 ] C++やSTLではコンテナの全要素を出力するときどのようにするのでしょうか? kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8944.txt 今は上のようにやってます。 list vector mapやDataのようなクラスが増えていくにつれコードが増え、似たような処理が何回も出てきそうです
162 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:37:20 ] std::list<T>をTにすればコンテナ全種に使えるようになるはず。
163 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:41:47 ] よくわからないけどこういうこと? template<typename T> std::ostream &print(std::ostream &ost, const T &cont) { ost << "["; std::copy(cont.begin(), cont.end(), std::ostreambuf_iterator<T::value_type>(ost, ",")); ost << "]"; return ost; }
164 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:50:54 ] コンテナを取るんじゃなくて、algorithmみたいに範囲を取るようにすれ。 template<typename Iterator> std::string to_str2(Iterator first, Iterator last) { std::ostringstream oss; Iterator it = first; oss << "["; if (it != last) { while (true) { oss << (*it); ++it; if (it == last) break; oss << ", "; } } oss << "]"; return oss.str(); }
165 名前:デフォルトの名無しさん mailto:sage [2009/02/27(金) 20:51:31 ] まぁそれだけだとlist<list<...>>みたいなのに適応できないけどな
166 名前:161 mailto:sage [2009/02/27(金) 23:02:22 ] >>162 ほんとですね、全部なおしました std::ostream& operator<<(std::ostream & rhs, const <T>& lhs)はダメなんですね 当たり前なんでしょうけど >>163 こういう書き方もできるのですね、、、 p to_str(dlist)かp 'to_str(std::list<Data, std::allocator<Data> > const&)' (dlist)でgdbから呼べるのですが、 ostreamかtemplate使うと消える?みたいなのでObject.to_string()とテンプレートではないto_str(x)は用意するので ostreamやostringstreamを極力使わずにできればなと >>164 ,165 Iteratorの中身がコンテナじゃなさそうな場所に使ってみます
167 名前:デフォルトの名無しさん mailto:sage [2009/02/28(土) 00:04:03 ] とりあえず、rhsは right hand side(右側)の略なんだから lhs << rhs って形にしようぜw
168 名前:デフォルトの名無しさん mailto:sage [2009/03/02(月) 12:55:03 ] 関数オブジェクトにしといてfor_each()じゃだめなのか
169 名前:デフォルトの名無しさん mailto:sage [2009/03/03(火) 21:45:22 ] >>168 それ、コードではどうやるの
170 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 01:25:00 ] こんな感じ? template <class T> struct Out { void operator()(T& i) const { std::cout << i << ' '; } }; int main() { int a[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}; std::list<int> aa(a, a + sizeof(a) / sizeof(a[0])); std::for_each(aa.begin(), aa.end(), Out<int>()); }
171 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 12:40:27 ] ostream_iteratorにassignという手も
172 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 16:04:02 ] 例としてよく引き合いに出されるのは ostream_iterator に copy だと思うが・・・
173 名前:デフォルトの名無しさん mailto:sage [2009/03/04(水) 16:19:22 ] for_eachを使うと copy よりも凝った出力形式を作れるってくらいかな
174 名前:デフォルトの名無しさん mailto:sage [2009/03/05(木) 09:49:02 ] #include <pstade/oven/io.hpp> #include <pstade/oven/make_range.hpp> int main() { namespace oven = pstade::oven; std::list<int> l = a|oven::copied; std::cout << (oven::make_range(l)) << "\n"; }
175 名前:デフォルトの名無しさん mailto:sage [2009/03/10(火) 23:08:36 ] >>136 ,143 www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#92 今のドラフトでは以下の記述が追加されている。 > algorithms that take function objects as arguments are permitted to copy those function objects freely アルゴリズム内でどうコピーされるかは基本的に実装任せってことになるらしい。 for_each() の戻り値はまったく使えないことになりそうだ。
176 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 16:56:46 ] >>175 for_eachの戻りはコピーされた関数オブジェクトに内部状態が反映されてるんじゃなかった?
177 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:17:17 ] >176 関数オブジェクトに全要素を通して処理した結果の状態が保持されていることを期待するだろうが、 極端に言えば各要素の呼び出し毎に新しくコピーした関数オブジェクトを渡されたりすると、期待する 結果と異なる。 参照使うなりコピーされても大丈夫なようにはできるからまったく使えないは言い過ぎ。 とはいえ、そういう用途なら accumulate 使えばいいじゃん、とは思う。
178 名前:デフォルトの名無しさん mailto:sage [2009/03/14(土) 18:22:46 ] boost::ref使って渡せばいいんじゃないか。boost::mpl::for_eachではうまくいった
179 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 22:23:42 ]
180 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:02:38 ] char *buf = new char[n]; //(snip) std::istream is(pointer_streambuf(buf, buf_size)); みたいな感じで、ポインタをバインドできるstreambufってある? ないならつくるんだけど。
181 名前:180 [2009/03/28(土) 19:11:47 ] っていうか勢いあまって作ってしまったんだけど、標準かboostにあるならそっち使う。 あと、>>180 の訂正: x char *buf = new char[n]; o char *buf = new char[buf_size];
182 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 19:27:36 ] istrstreamか? 廃止予定だけどw
183 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 20:12:25 ] >>182 おk。でも廃止か。 strstreambufも廃止なんかな。 先にstringstream使ってて、basic_stringにしか対応してないから、 strstreamは無視してたわ。
184 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:15:50 ] vectorについて、ある時点でのvectorの中身を参照するような配列のポインタ、 ちょうどstringのc_strのようなものはありますでしょうか。 allocatorのpointerやaddressがそうなのかと思ったのですが、 vector<int> v; v.push_back(1); v.push_back(2); const int* p = v.get_allocator().const_pointer(); for(int i=0; i<v.size(); i++) cout << p[i]; のように書いても大丈夫でしょうか。
185 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:24:59 ] いやいや、むしろ&v[0]とか&v.front()でいける。 アロケータのconst_pointerはT const*のtypedefだし、addressは&演算子と同じこと。 事実上、死に設定。
186 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 19:36:31 ] どうしてイテレータじゃだめなのかすら?
187 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:48:40 ] >>185 ありがとうございました。 >>186 C定義の関数に渡す必要があるためです。
188 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:49:58 ] v.at(i)でええやん
189 名前:デフォルトの名無しさん mailto:sage [2009/03/31(火) 20:53:17 ] やりたかった例としてはこっちの方が良かったかもしれません。 int buf[256]; if(v.size()<256) memcpy(buf, &v[0], v.size());
190 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 14:51:17 ] C++0xならv.data()が使えるんだけどな
191 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 06:40:05 ] SGIがなんかあれなんですよね
192 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 10:09:49 ] 2度目のchap11
193 名前:インドリ [2009/04/09(木) 10:03:38 ] blogs.wankuma.com/episteme/archive/2009/04/08/171040.aspx d.hatena.ne.jp/faith_and_brave/20090408
194 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 11:21:23 ] 淫鳥
195 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 22:35:56 ] 久しぶりにSTLPort使おう思ったら、ビルドまでずいぶん便利になってるのな……
196 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 23:09:07 ] STLport 5.2.1とboost 1.38.0を一緒に使おうと思ったらビルドエラーが出まくって無理だった
197 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 18:33:47 ] ちょw
198 名前:デフォルトの名無しさん [2009/04/22(水) 21:47:20 ] 自分で作ったクラスにイテレータを実装する方法がいまいちわかりません。 どこかにいい解説はないでしょうか? それとも皆 boost::iterator_facade を使ってるのかな?
199 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 23:50:36 ] >>198 boost::iterator_facade で何か不満でも?
200 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 23:58:19 ] boostはインストール禁止なんです…
201 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:07:33 ] なんでSTLport5.2.1をMinGWでビルドしようとすると "awk"が見つかりません のエラーが出るの? STLport5.1.5までは何の問題もなくビルド出来ていたんだが
202 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 00:13:15 ] >>200 じゃ、 boost::iterator_facade の実装を見るとか。 とりあえず作ってみたものと、その問題点をここで晒してみるといいかもしれない。
203 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 01:37:55 ] >>198 std::iteratorのマニュアルを読んで、 std::istream_iteratorみたいな単純なやつを読む。
204 名前:デフォルトの名無しさん mailto:sage [2009/04/23(木) 06:13:13 ] インストールというか置くだけで使えるよ! そういうことではないんだろうが
205 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 16:56:09 ] lower_bound/upper_boundですが ttp://www.wakhok.ac.jp/~sumi/stl/manual/bsearch.html#lower_bound() > valueと一致する値を持つ最後の次の要素。見つからない場合はlast。 ttp://www005.upp.so-net.ne.jp/episteme/html/stlprog/algorithm.html#lower_bound > ソートされたシーケンス[first,last)に対し、valueより大きいか等しい最初の要素の位置を返します。 書いてあることが違うのはどういう事なんでしょう? 手元の環境(VC2008EE)では後者のようですが・・・。
206 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 17:18:07 ] >>205 その前者は、 >ある値と一致する範囲の一番最初を返す と書いてある見出しとも矛盾している。
207 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:04:49 ] 後者が正しい。 もともと lower_bound と upper_bound は value を挿入可能な半開区間 [ lower_bound, upper_bound ) を探すためのアルゴリズムだから。 これは equaLrange の結果に等しい。 って、マッサー本に書いてあった。確か。
208 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:22:49 ] 前者はlowerとupperの解説文章が逆ってことかな
209 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 18:27:28 ] >>206 本当ですね。 >>207 なるほど。 >>208 逆としてみても、「見つからない場合はlast。」というのはおかしいですね。 あと、引数や戻り値のイテレータがランダムアクセスイテレータなのが気になります。 どうもありがとうございました。
210 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 05:52:59 ] class A { private: int m_nTime; public: A( int nTime ) : m_nTime( nTime ) {} int GetTime() { return m_nTime; } } typedef map< int, A * > AMap; typedef AMap::value_type AMapValue; typedef list< AMap * > AMapList; 例えば上記の様な定義をしていて、 メイン関数内で、AMapList内をイテレータを利用して、特定のAMapの「Key」部を検索し、 見つかったら、AMapの「Value」部を出力(クラスAのGetTime()を呼び出す)するような処理 をさせたいのですが、どうすれば実現できるでしょうか? また、listコンテナの中にmapコンテナを突っ込むような利用は、一般的にあまりされないの でしょうか?
211 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 09:08:28 ] >>210 それ、mapじゃなくてpairじゃいかんの?
212 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 10:43:41 ] >>210 とりあえず自分で書いたやつを見せてみろよ。何がわからんのかわからん。
213 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 15:15:05 ] >>210 1. AMapListから特定のAMapのイテレータを取得する。これをiとする 2. (*i->find(キー))->GetTime() mapをlistに入れた構造が必要な場合はmapをlistに入れるよ …としか答えられないな
214 名前:デフォルトの名無しさん mailto:sage [2009/04/28(火) 15:28:56 ] (*i)->find(キー)->second->GetTime();じゃね?
215 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 15:45:05 ] >>214 そうだわ スマネ
216 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:13:42 ] vectorの要素ってCopy ConstructiveとAssignable以外には必要ないはずだよな? VC9のSTLはDefault Constructiveを要求してきやがるんだが……。 #include <vector> class hoge { hoge(int) {} hoge(const hoge&) {} hoge& operator=(const hoge&) { return *this; } }; int main() { std::vector<hoge> vec; vec.resize(10); }
217 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:30:07 ] >>216 それ、 resize() のあとの要素が何で初期化されてることを期待してるの?
218 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:46:00 ] ああ、ごめん書き間違えた resizeの第二引数にhogeの適当なインスタンス渡してもだめなんだよ。
219 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 20:48:13 ] g++つかえば
220 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:14:50 ] >>216 bcc 6.1.0でも次のようなエラーが出るよ エラー E2285 vector 608: 'hoge::hoge()' に一致するものが見つからない(関数 vector<hoge,allocator<hoge> >::resize(unsigned int) ) エラー E2247 vector 1179: 'hoge::hoge(const hoge &)' はアクセスできない(関数 vector<hoge,allocator<hoge> >::_Insert_n(_Vector_iterator<hoge,allocator<hoge> >,unsigned int,const hoge &) ) エラー E2247 vector 1203: 'hoge::hoge(const hoge &)' はアクセスできない(関数 vector<hoge,allocator<hoge> >::_Insert_n(_Vector_iterator<hoge,allocator<hoge> >,unsigned int,const hoge &) ) エラー E2247 xutility 1681: 'operator hoge::=(const hoge &)' はアクセスできない(関数 std::void fill<hoge *,hoge>(hoge *,hoge *,const hoge &) ) エラー E2247 xutility 1551: 'operator hoge::=(const hoge &)' はアクセスできない(関数 std::hoge * _Copy_backward_opt<hoge *,hoge *>(hoge *,hoge *,hoge *,_Nonscalar_ptr_iterator_tag) ) エラー E2247 xutility 1515: 'operator hoge::=(const hoge &)' はアクセスできない(関数 std::hoge * _Copy_opt<hoge *,hoge *>(hoge *,hoge *,hoge *,_Nonscalar_ptr_iterator_tag) ) エラー E2247 28: 'hoge::hoge(const hoge &)' はアクセスできない(関数 std::void _Construct<hoge,hoge>(hoge *,const hoge &) ) *** コンパイル中に 7 個のエラーが発生しました ***
221 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:18:44 ] あら間違えて書き込んでしまった ちなみにMinGW5.1.2(gcc3.4.5) + STLport5.1.7で同じソースをコンパイル すると vector1.cpp:11: error: no matching function for call to `hoge::hoge()' vector1.cpp:5: note: candidates are: hoge::hoge(const hoge&) vector1.cpp:4: note: hoge::hoge(int) _algobase.h: In function `_OutputIter stlp_priv::__copy(_RandomAccessIter, _RandomAccessIter, _OutputIter, const stlp_std::random_access_iterator_tag&, _Distance*) [with _RandomAccessIter = hoge*, _OutputIter = hoge*, _Distance = ptrdiff_t]': _algobase.h:250: instantiated from `_OutputIter stlp_priv::__copy_ptrs(_InputIter, _InputIter, _OutputIter, const stlp_std::__false_type&) [with _InputIter = hoge*, _OutputIter = hoge*]' (...以降あまりにエラーが多いので省略) で、やはりDefault Constructiveを要求してくるので、 Dinkumwareだけの問題ではない事がわかる。
222 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:24:02 ] ちなみに public: hoge() {} を入れると両者とも一発で通る。
223 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:28:54 ] resizeのプロトタイプは void resize(size_type sz, T c = T()); だからデフォルトコンストラクタがないと通らないこと自体は当然
224 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:50:24 ] ただ実装はSTLPortもDinkumwareも void resize(size_type, T) void resize(size_type) のように二つの関数に分けてるがな
225 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:55:27 ] #include <vector> struct hoge { hoge(int) {} hoge(const hoge&) {} hoge& operator=(const hoge&) { return *this; } }; int main() { std::vector<hoge> vec; vec.resize(10, hoge(5)); return 0; } これで gcc version 3.4.4 (cygming special, gdc 0.12, using dmd 0.125) gcc version 4.3.2 20080827 (beta) 2 (GCC) ※ on cygwin VC7.1 cl (Version 13.10.6030 for 80x86) VC8 cl (Version 14.00.50727.762 for 80x86) VC9 cl (Version 15.00.21022.08 for 80x86) bcc 6.10 Comeau 4.3.9b + VC7.1 Comeau 4.3.9b + VC8 Comeau 4.3.9b + VC9 Comeau 4.3.9b + bcc 6.10 全部通るよ?
226 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:57:11 ] >>223 >>218
227 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 21:57:50 ] >>225 むしろそれだけの環境を使いこなすお前は何者
228 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:04:53 ] 俺の場合、<memory>218行目の typename _Alloc::value_type _Val; でもろにDefault Constructor要求された。
229 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:09:42 ] >>216 privateじゃん
230 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:13:13 ] こりゃひどい
231 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 22:22:48 ] ワラタ
232 名前:デフォルトの名無しさん mailto:sage [2009/04/29(水) 23:17:14 ] ついでに言うとdefault constructibleだ。
233 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 01:05:59 ] いいもの見させてもらった 記念パピコ(゚∀゚)
234 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 20:36:31 ] あなたをprivateです。
235 名前:デフォルトの名無しさん mailto:sage [2009/04/30(木) 21:58:18 ] わたしはあなたのpublic
236 名前:デフォルトの名無しさん mailto:sage [2009/05/01(金) 00:03:10 ] ごめんなさい、ずっとfriendでお願いします