- ベストアンサー
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 が入れ子になっていることが関係しているのでしょうか? ご教示願います。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
> Expression: vector iterator not dereferencable 空のvectorの(ありもしない)要素を参照しようとしたんじゃないですか?
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
そのエラーはいつ出るのですか? コンパイルするとき? それとも実行している最中? 後者なら, 単に「あなたのプログラムが間違っているだけ」という可能性も考えられますよ.
お礼
エラーが表示されるのは実行中ですので、 どこかで間違ってしまっているということですね ありがとうございました。
- Tacosan
- ベストアンサー率23% (3656/15482)
「エラーになる」というのは, 具体的には ・どのコンパイラで ・どのようなメッセージが出る のですか?
お礼
ご回答ありがとうございます。 開発環境は、VC++2010です。 エラーは、 Expression: vector iterator not dereferencable For information on how your program can cause an assertion failure,see the Visual C++ documentation on asserts. というエラーでした。 No1の方のご回答いただいたとおり、他の方では再現ないので、 ネスト自体は関係なさそうですね。
- επιστημη(@episteme)
- ベストアンサー率46% (546/1184)
再現できません。 #include <iostream> #include <vector> using namespace std; class Myclass { public: vector<int> num; }; int main() { vector<Myclass> obj; obj.push_back(Myclass()); vector<Myclass>::iterator it=obj.begin(); vector<int> work; work.push_back(123); it->num=work; cout << obj[0].num[0] << endl; }
お礼
ご回答ありがとうございました。 毎回動作を確認していただきまして、ありがとうございます。 他の方では、問題ないという証言だけで十分助かります。 また、お力をお貸しください。
お礼
度々のご回答感謝いたします。 仰って頂いたとおりでした。確認不足で申し訳ございません。 iterator はスタティックだったのですが、プッシュバックしたことに よってiteratorが空になっていました。 大変助かりました。