• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:vectorのresizeについて)

vectorのresizeについて

このQ&Aのポイント
  • C++のvectorのresizeメソッドでコンストラクタの値を指定できるか
  • resize以外でコンストラクタの値を指定する方法について

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.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; が正解です。

jpir
質問者

お礼

無事コンパイルでき問題を解決することができました. ありがとうございます.

その他の回答 (2)

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.2

> 私は 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が無いのは意図的だったのですね。 一応、コンパイルできるとは思います。

jpir
質問者

補足

回答ありがとうございます 早速試した結果コンパイルすることができませんでした. 実際入力したコードはこのようになっています. #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)
回答No.1

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) {} }; という具合です。

jpir
質問者

補足

回答ありがとうございます. 上述されたことでちょっと質問があるのですが, 私は 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); } のような記述でコンパイルできるのでしょうか?

関連するQ&A