- ベストアンサー
vectorのresizeについて
- C++のvectorのresizeメソッドでコンストラクタの値を指定できるか
- resize以外でコンストラクタの値を指定する方法について
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- vector操作でコピーコンストラクタの抑制
std::vector<std::vector<MyData>> vecvec; とした場合、vecvec.insert() / erase() でも MyData のコピーコンストラクタは走らないのですが、 struct MyVector { std::vector<MyData> vec; }; std::vector<MyVector> vecMyVec; とした場合、vecMyVec.insert() / erase() で、MyData のコピーコンストラクタが走ります。 MyVector が、何らかの継承と実装をすれば、回避できると思うのですが、 その方法を知ってる方がいらしたら教えてください。
- 締切済み
- C・C++・C#
- min_elementの三番目の引数
ただいまSTLを勉強しているのですが、min_elementの三番目の引数の意味がわかりません。 iter min_element(iter first,iter last,pred pr); 以下のように使うのかなと自己解釈しましたが違うようです。 どうかご教授お願いします。 struct DATA{ int a; int b; }; main() { std::vector< DATA > data_vec; std::vector< DATA >::iterator it; for(int i=0;i<10;i++)//適当な数を10個プッシュバック { DATA data; data.a=rand(); data.b=rand(); data_vec.push_back(data); } //it = min_element(data_vec.begin(),data_vec.end(),DATA::a); }
- ベストアンサー
- C・C++・C#
- Vector ClassのVector配列
Vector配列からVector配列への代入などのアクセスは問題なく行えるのですが、 Vectorを入れ子にした場合?にエラーが生じてしまいます。 Class Myclass{ public: vector <int> num; }; vector <Myclass> obj; ・・・・ vector <Myclass>::iterator it=obj.begin(); vector <int> work; ・・・・ it->num=work; とするとエラーになってしまいます。 代入以外のresize()などのアクセスもエラーになってしまいますが、 vector が入れ子になっていることが関係しているのでしょうか? ご教示願います。
- ベストアンサー
- C・C++・C#
- 2次元のvectorにオブジェクトのポインタを格納
VC++6.0です。 まず、ポインタでなく、int型の格納なら分かったんです。 ・・・ #include <vector> using namespace std; main(){ vector <vector<int > > a(10); ←←← for(int i=0;i<10;i++){ a[i].resize(10); } ・・・ for(int j=0;j<10;j++){ for(int i=0;i<10;i++){ a[i][j]=i+j; } } ・・・ } という感じで利用できることが。 しかし、やりたいのは、整数型でなく、 オブジェクトのポインタを格納したいんですが、 矢印部分を例えば、vector <vector<class *> > a(10); などどしてもエラーになってしまいます。 どのように実装したらよいのでしょうか?
- 締切済み
- C・C++・C#
- vectorを引数として使いたいのですがエラーが出てしまいます
vectorを引数として使いたいのですがエラーが出てしまいます 以下のようなコードでコンパイルでエラーが出てしまうのですがどうしたら良いでしょうか。 class car{ public: int tire; int engine; } というクラスを作ります。 main関数内で function(car a[]);//関数の宣言 int main(){ std::vector<car> car1(0);//car型のcar1を作成 std::vector<car>::reference car1rf=car1.front(); function(car1rf);//関数に代入 } function(car a[]){ car test; test.tire=1; a.push_back(test); } としてpush_backを外部関数で行いたいのですが、エラーが出てしまいます。 どうしたら良いでしょうか。
- ベストアンサー
- C・C++・C#
- C++のクラスについて
/*以下のコメントがある行では何故、コンストラクタ(class2::class2)を指定出来ないのですか? デストラクタ(class2::~class2)の場合も問題なくコンパイルが通り、実行できます (http://codepad.org/1oJkxjyZ の23行目) 開発環境 Windows XP SP3 コンパイラ:GCC 実行結果 class1のコンストラクタ class2のコンストラクタ aiueoの実行 class2のデストラクタ class1のデストラクタ */ #include<iostream> class class1; class class2; class class1{ public: class1(); ~class1(); private: class2*pointer; }; class class2{ public: class2(); ~class2(); void aiueo(); }; class1::class1(){ std::cout<<"class1のコンストラクタ"<<std::endl; pointer=new class2(); pointer->aiueo(); //aiueoを~class2に置き換えてもコンパイル出来るが、class2だとエラーが出る } class1::~class1(){ delete pointer; std::cout<<"class1のデストラクタ"<<std::endl; } class2::class2(){ std::cout<<"class2のコンストラクタ"<<std::endl; } class2::~class2(){ std::cout<<"class2のデストラクタ"<<std::endl; } void class2::aiueo(){ std::cout<<"aiueoの実行"<<std::endl; } int main(){ class1 test1; return 0; }
- ベストアンサー
- C・C++・C#
- Vectorから一部分を取り出す方法はありますか?
教えていただきたいのですが、 1つのVectorの中に、いろいろなモノ(例えば、番号、名前、年齢のデータなど) が入っていたとして、そのVectorから番号だけ取り出して表示するなどということはできるでしょうか? /* 番号、名前、年齢を取得するメソッド(Vectorが戻り値)があるとして.... */ Vector vec = new Vector() ; str = number+name+age ; //これがたくさんあるとします vec.add(str) ;//番号と名前と年齢の組み合わせをVectorに格納 return vec ; /* 取りだし */ Vector vec=new Vector() ; vec = getVector() ; //メソッドから値を取りだし for(int i=0;i<vec.size();i++) { System.out.println(vec.elementAt(i)) ; } こんな感じだと、全部表示されてしまいます.... 部分ごとに取り出す方法はないでしょうか?初歩的な質問でごめんなさい、 よろしくお願いします!
- ベストアンサー
- Java
- C++ vectorに配列をプッシュしたい
C++のstd::vectorが格納する要素として配列を指定することはできますか vectorを使って2次元配列を表現したいときは,たとえば std::vecor<std::vector<int>> v; とすれば2次元配列が表現できますよね. 2次元配列の列方向の要素数が2で固定されていて,行方向の要素数が不確定のデータを扱いたいので,2次元配列を格納するvectorで扱えればなと思いました. (2個で1組のデータがたくさんあるということなので,vectorの2次元配列ではありません) std::vector<int[2]> v; int a[2]; a[1] = 1; a[0] = 2; v.push_back(a); という書き方ではコンパイルできなかったのですが,vectorに配列要素を格納させることはできないのでしょうか. あるいは,もし可能ならどのように書けばよいのでしょうか. 結局は1組のデータセットを構造体化してそれをvectorにプッシュするやり方に落ち着いたのですが,疑問に思ったままモヤモヤしているので質問させて頂きます. 「vector 配列」などのキーワードで検索してみましたが,vectorの動的配列としての紹介記事が多くヒットしてしまい,自分ではうまく情報を発見することはできませんでした. よろしくお願いします.
- ベストアンサー
- C・C++・C#
- C++でSTLのVectorを使った構造体について
Vectorで作った構造体配列a内でさらにVectorで宣言された配列bを作った場合、bに数値を代入するにはどうすれば良いのでしょうか? struct A { std::vector<int> b; }; std::vector<A> a;
- ベストアンサー
- C・C++・C#
- std::vector 2次元配列の列方向初期長
std::vectorを使った2次元配列を std::vector< std::vector<int> > a; の様な方法で宣言できるところまでは分かったのですが、aの列の初期長を予め指定する方法はないでしょうか? 例えば、必要な列方向初期長が10であるとします。 行方向のデータ数Nが実行中に与えられる場合 a.resize(N); for (auto &n : a) n.reserve(10); で目的は達せられるのですが、Nが数千万のオーダーだど非常に時間がかかります。 仮にNが2000万個とすると、私のPCでa.resize(N)は約90ミリ秒で完了しますが、for (auto &n : a) n.reserve(10);には約10秒を必要とします。 そこで、aの列の初期長は10(reserve(10)の意味)であると言う何らかの指定を行って a.resize(N)を行った際に、自動的にfor (auto &n : a) n.reserve(10);を行ったのと同じ状態になっているという aの宣言方法があれば教えてください。 aの列方向の初期長(本例の場合は10)は与えますが、.push_back() により10個以上のデータを列方向に詰める場合も想定する為、完全固定長の std::array<> は使用できません。
- ベストアンサー
- C・C++・C#
- EPSONの古い機種PM-D750が突然動かなくなった!半年前までは問題なく使用できていたのに、最近は全く動かない。どうすれば復活させることができるのか、教えてください。
- PM-D750という古いEPSONのプリンターが突然動かなくなりました。半年前までは普通に使用できていたのに、最近は一切反応しません。復活させるためにはどのような手順を踏めばいいのでしょうか?教えてください。
- EPSONの古い機種PM-D750が何もしていないのに動かなくなりました。半年前までは問題なく使えていたのですが、突然の不具合に悩んでいます。復活させるためにはどのような方法があるのか、教えてください。
お礼
無事コンパイルでき問題を解決することができました. ありがとうございます.