あなたは正しい軌道に乗っていますが、 for ループでエラーを犯しました:
rowTemp_ex.assign(array, array+3));
これにより、反復ごとに配列の同じ部分が割り当てられます。行のサイズ (3) に i を掛ける必要があります。
rowTemp_ex.assign(array + i * 3, array + (i * 3) + 3));
i = 0: 0*3 0*3+3
i = 1: 1*3 1*3 + 3
array: [ 0 ][ 1 ][ 2 ][ 3 ][ 4 ][ 5 ] [one past the end]
への呼び出しvector::erase
は冗長vector::assign
です。次の反復では、とにかく前のコンテンツを破棄します。
これは、可能性のある奇妙な要素(テストされていない)も処理する、より一般的なものです。
const size_t arr_size = N;
const size_t n_cols = M;
const size_t n_rows = arr_size / n_cols;
const size_t n_odd = arr_size % n_cols;
int arr[arr_size] = { .... };
int* begin = arr;
int* end = arr + (n_rows * n_cols);
while( begin != end ) {
ex.push_back(std::vector<int>(begin, begin + n_cols));
begin += n_cols;
}
if (n_odd)
ex.push_back(std::vector<int>(begin, begin + n_odd));