- 締切済み
C++のリストについての質問です。
C++のリストについての質問です。 1~99999999までの内容で、リストを作成しようと、下記の様に記載したのですが、 サイズが「1」となってしまいます。99999999個にはならないのでしょうか? ------------------------------------------- long start = 1; long end = 99999999; list<long> lst(start, end); cout << lst.size() << endl; -------------------------------------------
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
listクラステンプレートにはいくつかのコンストラクタがありますが、今回のケースでは、 template <class InputIterator> list(InputIterator first, InputIterator last, const Allocator& a = Allocator()); が呼び出されているかと思います。 ここで、InputIterator が long型と解釈されている訳です。 この形式のコンストラクタの場合、InputIterator が汎整数型であれば、 list(static_cast<list<long>::size_type>(first), static_cast<list<long>::value_type>(last), a); と同じ意味になります。 ですので、99999999 という値を持つ 1 要素だけを持つことになるのです。
- Tacosan
- ベストアンサー率23% (3656/15482)
すみません, 「コンストラクタ」って書いちゃったけどよく見たら start も long だったんですね. だとすると話は単純じゃなく, オーバーロードされた関数 (コンストラクタ) のうちどれを使うのかってことになりますね. 「個数」と「値」を引数にとるテンプレートじゃないコンストラクタと, 「2個のイテレータ」を引数にとるテンプレート関数のどっちになるかという話になって, 前者を選んでいる, と. ん~, すぐにはわからん. ちなみに後者を選んじゃうと (単項 * が適用できず) エラーになるから結局駄目ですね. ということで, たとえば boost の counting_iterator なり irange なりを使えばよいかと.
- Tacosan
- ベストアンサー率23% (3656/15482)
なりません. std::list のコンストラクタについて調べてください.