만해 님이 쓰신 글 :
: 안녕하세요 만해 입니다.
:
: 지금 STL의 deque<bool> 이란 객체를 사용 하고 있는데요
:
: 이걸 함수로 인자로 넘겨 줘야 하는데요
:
: 자꾸만 에러가 나네요
:
: 안되면 그냥 void* 형으로 형변환해서 날릴까 하는데
:
: 이렇게 되면 어떻게 될지 몰라서 아직 해보지는 않았습니다.
:
: 우선 이게 뭘하는거나면요
:
: 8*8 배열이 있다고 할때요
:
: 임의의 행 을 가르키는
:
: ColIdx[0],ColIxdx[1] 를 가져 와서
:
: 8*8 행렬의 ColIdx[0] 값과 ColIdx[1]을 서로 바꿔 주는 역활을 하려하는데요
:
: void TCrypt::bit_col_swap ( const int Idx1 , const int Idx2 ,deque<bool> &matrix(64))
: {
:
: for ( int i = 0 ; i < 8 ; i ++ )
: {
: bool temp;
: temp = matrix[Idx1 * 8 + i];
: matrix[Idx1 * 8 + i] = matrix3[Idx2 * 8 + i];
: matrix[Idx2 * 8 + i] = temp;
: }
:
: }
:
: 이 소스가 함수로 만들려고 하는 부분인데요
:
: 위에 나와있는 matrix3를 함수의 인자를 통해 받을려고 하는데 안되네요
:
: 고수님들의 조언 부탁 드립니다.
vector나 deque을 써서 matrix를 만드는 방법은
C/C++ Tip'N Tricks에 올렸습니다.
http://www.borlandforum.com/impboard/impboard.dll?action=read&db=cpp_tip&no=2
그러니까 굳이 2차원을 1차원으로 변환하는 위의 코드를 쓰실 필요는 없겠구요.
그리고 STL을 쓰실 때는 typedef을 잘 쓰시면 타이핑량도 줄이고 소스도 훨씬 읽기 쉬워집니다.
예를 들어,
typedef deque<bool> bitdeque;
typedef vector<bitdeque> bitmatrix;
실제로 이 행렬을 선언하시려면
bitmatrix bm(8, bitdeque(8));
그런데, 행(行, 가로 줄)을 row, 열(列, 세로 줄)을 column이라고 하지 않나요?
col 대신에 row를 써야겠죠. ^^;
그럼 위의 코드를 수정해보죠.
이 함수는 TCrypt의 멤버일 필요는 없겠네요.
void bit_row_swap(const int Idx1, const int Idx2, bitmatrix& matrix)
{
assert(0 <= Idx1 && Idx1 < matrix.size()); // 인덱스 범위 체크
assert(0 <= Idx2 && Idx2 < matrix.size()); // 틀리면 프로그램 종료
swap(matrix[Idx1], matrix[Idx2]); // 이 한 줄이면 끝납니다. 넘 간단! ^_^
}