Запомнить
преждевременной оптимизации является корень всех зол
Написать читаемый код и когда приложение не будет достаточно эффективным, то профиль, и вы увидите, где у Вас есть узкие места но на данный момент я почти уверен, что вы не использовали memcpy, не будет влиять столько, сколько вы думаете.
Но ..
Вы помечено C++, так вот мой простой compileable пример реализации C++. Это копия подматрицы до конца матрицы (не раньше, так что если вы будете проходить начальную точку, что подматрицы, например, 2,3 она не будет копировать его 0,0)
#include <iostream>
#include <iterator>
#include <algorithm>
using namespace std;
void copy_submatrix(size_t n,
size_t m,
const pair<size_t, size_t> &from,
const pair<size_t, size_t> &to,
vector<vector<int>> &oryginal_matrix)
{
auto begin_y = oryginal_matrix.begin() + from.first;
auto begin_to_y = oryginal_matrix.begin() + to.first;
auto end_y = begin_y + m;
for(; begin_y != end_y; ++begin_y, ++begin_to_y)
{
auto begin_x = (*begin_y).begin() + from.second;
auto begin_to_x = (*begin_to_y).begin() + to.second;
copy(begin_x, begin_x + n, begin_to_x);
}
}
void process_matrix(vector<vector<int>> &matrix,
size_t submatrix_n,
size_t submatrix_m)
{
for(size_t y = 0; y < matrix.size(); y += submatrix_m)
for(size_t x = 0; x < matrix.size(); x += submatrix_n)
copy_submatrix(submatrix_n,
submatrix_m,
{ 0, 0 },
{ y, x },
matrix);
}
void print(const vector<vector<int>> &matrix)
{
for(const auto &v : matrix)
{
copy(v.begin(),
v.end(),
ostream_iterator<int>(cout, " "));
cout << "\n";
}
}
int main() {
vector<vector<int>> matrix{
{ 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0 }
};
cout<<"before: \n";
print(matrix);
process_matrix(matrix, 2, 3);
cout << "after: \n";
print(matrix);
return 0;
}
Ну для этого случая (_maybe для this only_), скопируйте '0' в первый и третий столбцы и скопируйте' 1' во второй и четвертый. Для 'N * N' делать нечетные четные столбцы. – ameyCU
Это будет работать, но мне нужно более общее решение. Я отредактирую вопрос, чтобы уточнить это. –
И на каком языке вы используете? Выбери один_. –