int main()
{
const int row = 3;
const int col = 5;
const int s2da[row][col] =
{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};
int *r1 = new int[col] {1, 2, 3, 4, 5};
int *r2 = new int[col] {6, 7, 8, 9, 10};
int *r3 = new int[col] {11, 12, 13, 14, 15};
int **rows = new int*[row] {r1, r2, r3};
for(int r = 0; r < row; ++r)
{
for(int c = 0; c < col; ++c)
{
cout << rows[r][c] << " ";
}
cout << endl;
}
delete[] r1;
delete[] r2;
delete[] r3;
delete[] rows;
return 0;
}
for문을 돌려서 할 수도 있다.
int main()
{
const int row = 3;
const int col = 5;
const int s2da[row][col] =
{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};
int **matrix = new int*[row];
for(int r = 0; r < row; ++r)
{
matrix[r] = new int[col];
}
//r=0일때
//matrix[0]에 5칸 짜리 배열의 첫 번째주소가 대입
//r=1일때
//matrix[1]에 5칸 짜리 배열의 첫 번째주소가 대입
//....
for(int r = 0; r < row; ++r)
{
for(int c = 0; c < col; ++c)
{
matrix[r][c] = s2da[r][c];
}
}
//matrix[0]이면 5칸짜리 배열의 첫 번째 주소이므로
//(matrix[0])[0]이면 위와 같은 주소이다.
//print all elemants
for(int r = 0; r < row; ++r)
{
for(int c = 0; c < col; ++c)
{
cout << matrix[r][c] << " ";
}
cout << endl;
}
//delete
for(int r = 0; r < row; ++r)
{
delete[] matrix[r];
}
delete[] matrix;
return 0;
}
포인터의 포인터를 쓰기가 부담스럽다면
int main()
{
const int row = 3;
const int col = 5;
const int s2da[row][col] =
{
{1, 2, 3, 4, 5},
{6, 7, 8, 9, 10},
{11, 12, 13, 14, 15}
};
int *matrix = new int [row*col];
for(int r = 0; r < row; ++r)
{
for(int c = 0; c < col; ++c)
{
matrix[c + col * r] = s2da[r][c];
}
}
//print all elemants
for(int r = 0; r < row; ++r)
{
for(int c = 0; c < col; ++c)
{
cout << matrix[c + col * r] << " ";
}
cout << endl;
}
delete[] matrix;
return 0;
}
대부분의 선형대수학 코드들이 위와같이 인덱싱을 해서 쓰인다.
후에 하드웨어가속을 받기위해 더 복잡한 인덱싱이 필요할 수 있다.
'개발공부 > C++' 카테고리의 다른 글
정적 멤버 (0) | 2019.10.23 |
---|---|
다양한 반환 값들 (0) | 2019.10.22 |
포인터와 참조의 멤버 선택 (0) | 2019.10.22 |
참조변수 reference variable (0) | 2019.10.22 |
자료형에게 가명 붙여주기 (0) | 2019.10.21 |