C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[75358] Re:2차원 배열을 복사하는 방법은 어떻게 되나요?
빌더(TWx) [builder] 2773 읽음    2019-04-08 13:50
뽀뽀중 님이 쓰신 글 :
: 안녕 하세요
:
: 2차원 배열에 값을 입력을 했습니다.
:
: extern const double LocalRain10011100[13][7] = {
:     {3.4077953380702100, -0.4172062608032810, -0.2544842221026490, 0.2605352901421380, -0.0904749288418016, 0.0117518648471070, -0.0004378879933264},
:     {3.5616190730326900, -0.4679660667983840, -0.1041131606928940, 0.1128474398409040, -0.0240968518989493, -0.0019777948070965, 0.0006217971171193},
:     {3.7206797454445800, -0.5173927579546190, 0.0665009051572054, -0.0486815860803121, 0.0439699830083067, -0.0152560761724678, 0.0015980087551537},
:     {3.9061541234799200, -0.5757250787303070, 0.2963040209215300, -0.2594266298450850, 0.1275764711289890, -0.0305867734904000, 0.0026622075081452},
:     {4.0722254136815300, -0.6313924107492350, 0.5367356488429740, -0.4750294081829130, 0.2093171456820800, -0.0448168478372544, 0.0035982345962455},
:     {4.1634765534868200, -0.6639380184565550, 0.6839435343972310, -0.6055449161351130, 0.2576225180984680, -0.0529798962102692, 0.0041174876343332},
:     {4.2738132059953500, -0.7053737865816080, 0.8765244959395290, -0.7751597173906790, 0.3194947039384480, -0.0632413632161225, 0.0047558504662024},
:     {4.3441540329743400, -0.7330080896153980, 1.0075667686338200, -0.8900323611747060, 0.3609554064987290, -0.0700209550986551, 0.0051703174649366},
:     {4.3716186573834300, -0.7440581191901890, 1.0604620003039400, -0.9363005364101310, 0.3775722293368320, -0.0727198601130324, 0.0053339171854413},
:     {4.4169896297468800, -0.7626216655234860, 1.1499254999093700, -1.0144438043660800, 0.4055420878578250, -0.0772416507497683, 0.0056063897266798},
:     {4.5541893107153900, -0.8210501284314930, 1.4358487855546100, -1.2634128394000600, 0.4939915579633600, -0.0913924069767337, 0.0064475679961202},
:     {4.6321563145833600, -0.8556933851060030, 1.6081938980810100, -1.4130413410507000, 0.5467546559007330, -0.0997445518047987, 0.0069370529558854},
:     {4.7283161257945500, -0.8997250334954570, 1.8299958993373600, -1.6052379147842400, 0.6141817080844360, -0.1103385000135830, 0.0075516134329119}};
:
: 이 데이타를 새로 만든 2차원 배열 double dNewRainpoly[13][7] = {0, }; 에 복사 하려면, 어떻게 해야 하나요?
:
: 감사 합니다.
:



답변:


int a[3][4] =
{
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
};

위와 같은 2차원 배열이 있다고 할 때...

위 배열의 메모리 레이아웃은...

1
2
3
4

5
6
7
8

9
10
11
12

의 순서로 메모리에 선형적으로 배치됍니다.


따라서

int b[3][4];

a 를 b 로 카피하는 것은...

    memcpy(b, a, sizeof(a));

위와 같이 하면되지만...


stl 이용하는 게 더 편하고, 위의 int a[3][4] 를 std::array() 를 이용해서 표현하면
다음과 같이 적용할 수 있고...

#include <array>
using array3_4 = std::array<std::array<int,4>, 3>; // 컬럼과 로우가 바뀐 것에 주의.

array3_4 va =
{
   {
    {1,2,3,4},
    {5,6,7,8},
    {9,10,11,12}
   }
};  // 둘러싸는 괄호가 더 있는 것에 주의.


배열의 카피는

array3_4 vb;
vb = va;

또는
array3_4 vb(va);

printf("%d", vb[1][2]);

로 배열 디멘션의 크기와 상관없이 카피를 간단하게 할 수 있음.

legacy 신텍스 사용하지 말고 stl 사용해 버릇 하세요.

stl을 이용해서 코딩하면 버그에 노출될 가능성도 줄일 수 있고...
소팅, 트랜스폼, 패러렐 연산 등 각종 알고리즘 적용을 간단하게 할 수 있음.



+ -

관련 글 리스트
75357 2차원 배열을 복사하는 방법은 어떻게 되나요? 뽀뽀중 2504 2019/04/08
75358     Re:2차원 배열을 복사하는 방법은 어떻게 되나요? 빌더(TWx) 2773 2019/04/08
75359         친절한 설명과 더 좋은 방법을 알려주셔서 감사 합니다. ^^ 뽀뽀중 2566 2019/04/08
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.