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;
        }
    }