vector配列(C++)
動的にサイズを変更したい場合
vector< vector<int> > arr; //サイズ変更 arr.resize(20); // ()内の数字が要素数になる for( int i=0; i<20; i++ ){ arr[i].resize(10); }
初期化
要素数+初期値(2次元)
// int型の2次元配列(3×4要素の)の宣言 vector<vector<int>> data(3, vector<int>(4));
ユニークな値で初期化
C++11から直接初期化することが可能になった.
std::vector< std::vector<int> > v{{ 1, 1, 1 },{ 2, 2, 2 }};
macではg++ -std=c++11 ~~~.cpp
みたいな感じでコンパイルするとC++11が有効になってくれる.
参考
C++のvectorまとめ - Qiitaqiita.com
要素の総入れ替え
swapメソッドを使うか、代入でも要素がいれ変わる
std::vector<int> a{1, 2, 3}; std::vector<int> b{10, 9, 8, 7, 6}; a.swap(b);
参照渡し
呼び出し元のvector配列にも反映されるようになる.
void func(vector<int>& v){ for(size_t i=0; i<v.size(); i++){ cout << v[i] << endl; } }
void func2(vector<vector<double>>&A) { for(int i = 0; i < 2; i++){ for(int j = 0; j < 3; j++){ cout << A[i][j] << ", "; A[i][j]+=1; } cout<<endl; } }
newを用いた2次元配列の確保
int size_x = 5; int size_y = 10; double **p = new double*[size_x]; for(int i = 0; i < size_x; i++){ p[i] = new double[size_y]; } for(int i = 0; i < size_x; i ++){ for(int j = 0; j < size_y; j++){ p[i][j] = j + size_y * i; cout << p[i][j] << endl; } }