C++에서 2차원 배열을 단순히 복사 하고싶은데 어떻게하나요?
그냥 단순히 2차원 배열을
int a[3][4] =
{
{1,2,3,4},
{5,6,7,8},
{9,10,11,12}
};
이런식으로 있고 이걸 다른곳에 복사하고싶은데
int b[3][4];
이걸 b = a 로 하면되나요?
55글자 더 채워주세요.
2개의 답변이 있어요!
안녕하세요?
C++에서 2차원배열에 있는 데이터를 다른 2차원배열로 복사하고 싶다고 문의 주셨는데
예제로 보여드리겠습니다
int a[3][4] = { {1,2,3,4}, {5,6,7,8}, {9,10,11,12} }; int b[3][4]; memcpy(b, a, sizeof(a));memcpy함수로 이용해서 복사하시면 됩니다
대입 연산자를 특별히 오버라이딩 하지 않은 이상 단순히 대입 연산자로 복사할 수는 없습니다.
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}, b[3][4]; for(int i = 0; i < 3; i++) { for(int j = 0; j < 4; j++) { b[i][j] = a[i][j]; } }반복문을 사용해서 각각 복사하거나, memcpy 등의 함수를 사용해야 합니다.
int a[3][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}, b[3][4]; memcpy(b, a, sizeof(int) * 3 * 4); // sizeof(int) * 3 * 4 대신 그냥 sizeof(a)만 써도 됩니다.단, memcpy로 복사하는 건 진짜 2차원 배열이 아닌, (배열로 쓰이는 포인터)의 배열에 쓰면 안 됩니다.
영 좋은 방법은 아니지만, 2차원 배열을 원소로 갖는 구조체를 만들면 대입 연산자로 복사할 수 있습니다.
struct int3x4 { int a[3][4]; } int main() { struct int3x4 A = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}}; struct int3x4 B = A; // 사실 내부적으로는 대입 연산이 12번이나 일어납니다. (...) return 0; }하지만 구조체를 대입할 때는 사실 내부적으로는 배열의 모든 원소를 각각 대입하는 끔찍한 방법으로 동작합니다.