Я использовал memcpy
какое-то время с одномерными массивами, но когда я пытаюсь выполнить двумерные странные вещи. Следующая программа иллюстрирует проблему:memcpy и двумерные массивы
using namespace std;
#include <iostream>
#include <string.h>
#include <complex>
int main() {
int n=4;
complex<double> **mat1=new complex<double>*[n], **mat2=new complex<double>*[n];
for(int i=0;i<n;i++) {mat1[i]=new complex<double>[n]; mat2[i]=new complex<double>[n];}
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) mat1[i][j]=complex<double>(i*j, i+j);
}
cout << endl << "Matrix 1:" << endl;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) cout << mat1[i][j] << " ";
cout << endl;
}
cout << endl << "memcpy" << endl << endl;
memcpy(mat2, mat1, n*n*sizeof(complex<double>));
cout << "Matrix 1:" << endl;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) cout << mat1[i][j] << " ";
cout << endl;
}
cout << endl << "Matrix 2:" << endl;
for(int i=0;i<n;i++) {
for(int j=0;j<n;j++) cout << mat2[i][j] << " ";
cout << endl;
}
}
первую распечатку mat1
хорошо, но во втором и что из mat2
работает первая половина элементов являются бредом. Любая идея, что происходит?
Не используйте memcpy в C++, поскольку он не играет хороших с классами. Используйте 'vector >> mat1 (Y, vector > (X));' для вашего 2d массива. Чтобы скопировать 'mat2 = mat1;' –
В C++ вы действительно не должны использовать массивы memcpy или C-style. –
Массив * указателей на * одномерные массивы не является двумерным массивом. –