- ベストアンサー
vectorのresizeについて
- C++のvectorのresizeメソッドでコンストラクタの値を指定できるか
- resize以外でコンストラクタの値を指定する方法について
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 早速試した結果コンパイルすることができませんでした. typenameが抜けていましたね。 > typedef std::vector<T>::size_type size_type; > typedef std::vector<T>::value_type value_type; の部分ですが、 typedef typename std::vector<T>::size_type size_type; typedef typename std::vector<T>::value_type value_type; が正解です。
その他の回答 (2)
- jacta
- ベストアンサー率26% (845/3158)
> 私は typedef を使用せずに > B(std::vector<T>::size_type n, const std::vector<T>::value_type value) : vec(n,value){} > としたいのですが,問題ないでしょうか? 問題はありませんが、クラスBに相当するのものが実際にはどんなクラスかによっては、typedefした方がよいと思います(コンテナの一般的な規約にあわせる意味で)。 > また,main関数側では > int main() > { > B<A> c(10,20); > } > のような記述でコンパイルできるのでしょうか? explicitが無いのは意図的だったのですね。 一応、コンパイルできるとは思います。
補足
回答ありがとうございます 早速試した結果コンパイルすることができませんでした. 実際入力したコードはこのようになっています. #include <iostream> #include <vector> class A{ std::vector<double> data; public: A(int num) { this->data.size(); } }; template <class T> class B { std::vector<T> vec; public: typedef std::vector<T>::size_type size_type; typedef std::vector<T>::value_type value_type; B(size_type n, const value_type value) : vec(n, value) {} }; int main() { B<A> c(10,20); return 0; } 何か問題があるのでしょうか? 長くなってしまい申し訳ありません.
- jacta
- ベストアンサー率26% (845/3158)
resizeは第2引数にvalue_typeへのconst参照を渡すことができます。 this->vec.resize(a, A(0)); のようにすることができます。 ただ、今回の場合は、resizeではなくvectorのコンストラクタを使った方がよくないでしょうか。 template <class T> class B { public: typedef std::vector<T>::size_type size_type; typedef std::vector<T>::value_type value_type; B(size_type n, const value_type value) : vec(n, value) {} }; という具合です。
補足
回答ありがとうございます. 上述されたことでちょっと質問があるのですが, 私は typedef を使用せずに B(std::vector<T>::size_type n, const std::vector<T>::value_type value) : vec(n,value){} としたいのですが,問題ないでしょうか? また,main関数側では int main() { B<A> c(10,20); } のような記述でコンパイルできるのでしょうか?
お礼
無事コンパイルでき問題を解決することができました. ありがとうございます.