你在正确的轨道上,但在你的 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));