• ベストアンサー

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 が入れ子になっていることが関係しているのでしょうか? ご教示願います。

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

  • ベストアンサー
回答No.4

> Expression: vector iterator not dereferencable 空のvectorの(ありもしない)要素を参照しようとしたんじゃないですか?

scanfprintf
質問者

お礼

度々のご回答感謝いたします。 仰って頂いたとおりでした。確認不足で申し訳ございません。 iterator はスタティックだったのですが、プッシュバックしたことに よってiteratorが空になっていました。 大変助かりました。

その他の回答 (3)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

そのエラーはいつ出るのですか? コンパイルするとき? それとも実行している最中? 後者なら, 単に「あなたのプログラムが間違っているだけ」という可能性も考えられますよ.

scanfprintf
質問者

お礼

エラーが表示されるのは実行中ですので、 どこかで間違ってしまっているということですね ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

「エラーになる」というのは, 具体的には ・どのコンパイラで ・どのようなメッセージが出る のですか?

scanfprintf
質問者

お礼

ご回答ありがとうございます。 開発環境は、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の方のご回答いただいたとおり、他の方では再現ないので、 ネスト自体は関係なさそうですね。

回答No.1

再現できません。 #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; }

scanfprintf
質問者

お礼

ご回答ありがとうございました。 毎回動作を確認していただきまして、ありがとうございます。 他の方では、問題ないという証言だけで十分助かります。 また、お力をお貸しください。

関連するQ&A

専門家に質問してみよう