正しいんだろうか…?
#include <iostream> #include <string> #include <vector> using namespace std; int main() { vector< vector<int>* >* pvv; pvv = new vector< vector<int>* >(); pvv->push_back(new vector<int>(4)); pvv->push_back(new vector<int>(4)); pvv->push_back(new vector<int>(4)); /* ↓だと各列が同じポインタを参照してしまう。 vector< vector<int>* >* pvv; pvv = new vector< vector<int>* >(3, new vector<int>(4)); // スタックに確保したときにうまくいくのはコピーされるから? */ /* ↓だとスタックにメモリが確保される気が… vector< vector<int> >* pvv; pvv = new vector< vector<int> >(3, vector<int>(4)); */ pvv->at(0)->at(0) = 100; pvv->at(0)->at(1) = 101; pvv->at(0)->at(2) = 102; pvv->at(0)->at(3) = 103; pvv->at(1)->at(0) = 110; pvv->at(1)->at(1) = 111; pvv->at(1)->at(2) = 112; pvv->at(1)->at(3) = 113; pvv->at(2)->at(0) = 120; pvv->at(2)->at(1) = 121; pvv->at(2)->at(2) = 122; pvv->at(2)->at(3) = 123; for (vector< vector<int>* >::iterator i = pvv->begin(); i != pvv->end(); i++) { for (vector<int>::iterator j = (*i)->begin(); j != (*i)->end(); j++) { cout << *j << endl; } } for (vector< vector<int>* >::iterator i = pvv->begin(); i != pvv->end(); i++) { vector<int>* v = *i; delete v; } delete pvv; return 0; }
2次元配列を使うときのベストプラクティスが知りたいなー。
追記
普通に↓の様にすればいいような気がしてきた。
vector< vector<int> >* pvv; pvv = new vector< vector<int> >(3, vector<int>(4));
内部のvectorは別にnewする必要は無いよなー、たぶん。