|
책보셨으면 아시겠지만, copy같은 알고리듬은 컨테이너에 상관없이
적용될 수 있지만, 반복자는 엄격히 적용되는 것으로 알고 있습니다.
코드를 직접 실행해 보지는 않았지만, 제 생각으로는 아래 코드가
상당히 의심스럽네요.
bitdeque::iterator h = iterm->begin()
반복자를 컨테이너 간에 섞어쓰는건 굉장히 위험하다고 알고 있는데요.
혹시 이것때문에, 컴파일 에러가 나는건 아닌지..
h는 bitdeque에 대한 반복자인데, iterm->begin은 bitmatrix에 대한 반복자라서,
뭔가 좀 이상합니다.
제가 잘못 알고 있을수도 있고, 하여간 도움됬으면 하군요.
만해 님이 쓰신 글 :
: 안녕하세요 만해입니다.
:
: 지금 STL의 생소한 환경에 넘 어렵네요
:
: 몇몇 님들의 도움으로 근근히 이어 가고 있는데요
:
: Effective STL하고
:
: STL 튜툐리얼, 레퍼런스 가이드를 보면서 하는데요
:
: 흑흑~ 아직 잘 모르겠네요
:
: 제 질문은 ~
:
: bitdeque matrix1(128);
: bitdeque matrix2(128);
: bitmatrix matrix3(8,bitdeque(8));
: bitmatrix matrix4(8,bitdeque(8));
: bitmatrix matrix5(8,bitdeque(8));
: bitmatrix matrix6(8,bitdeque(8));
: Data16Word_u temp;
: bitdeque::iterator iteri;
: bitdeque::iterator iterj;
: bitmatrix::iterator iterm;
: int idx = 0;
:
: for ( iteri = matrix1.begin() ; iteri < matrix1.end(); idx++)
: {
: *iteri++ = key.Bytes[idx].bits.a;
: *iteri++ = key.Bytes[idx].bits.b;
: *iteri++ = key.Bytes[idx].bits.c;
: *iteri++ = key.Bytes[idx].bits.d;
: *iteri++ = key.Bytes[idx].bits.e;
: *iteri++ = key.Bytes[idx].bits.f;
: *iteri++ = key.Bytes[idx].bits.g;
: *iteri++ = key.Bytes[idx].bits.h;
: }
:
: copy(matrix1.begin(),matrix1.end(),matrix2.begin());
: rotate(matrix1.begin(),matrix1.begin()+6,matrix1.end());
:
: for ( iterj = matrix1.begin(), iteri = matrix2.begin() ;
: (iteri < matrix2.end())&&(iterj < matrix1.end()); iteri++,iterj++ )
: *iteri = *iteri ^ *iterj;
:
: for (iterm = matrix3.begin(),iteri = matrix1.begin() ; iteri < matrix1.end() ; )
: {
: for ( bitdeque::iterator h = iterm->begin() ; h < iterm->end() ; iterm ++ )
: {
: *h = matrix1[*iteri++];
: }
: }
:
: 맨 마지막 for문에 관련된건데요
:
: matrix1은 128 이고요
:
: matrix3, matrix4 는 matrix1을 둘로 쪼개서 앞 부분은 matrix3,
:
: 뒷 부분은 matrix4에 집어 넣어야 하느데요
:
: copy(matrix1.begin(),matrix1.begin(),matrix3.begin());
: copy(matrix1.begin()+65,matrix1.end(),matrix4.begin());
: copy(matrix2.begin(),matrix2.begin()+64,matrix5.begin());
: copy(matrix2.begin()+65,matrix2.end(),matrix6.begin());
:
: 이런식으로 해결을 할려고 하니깐
:
: 안되네요
:
: template <class _RandomAccessIter, class _OutputIter, class _Distance>
: inline _OutputIter
: __copy(_RandomAccessIter __first, _RandomAccessIter __last,
: _OutputIter __result, const random_access_iterator_tag &, _Distance*) {
: for (_Distance __n = __last - __first; __n > 0; --__n) {
: *__result = *__first;
: ++__first;
: ++__result;
: }
: return __result;
: }
: 여기 함수에서 에러 난다고 뭐라 뭐라 해는데 뭔애긴지는 모르겠고,
:
: 또 곤란한게 matrix3는 김백일님께서 알려 주신데로
:
: typedef deque<bool> bitdeque;
: typedef vector<bitdeque> bitmatrix;
:
: bitmatrix matrix(64) 로 정의된 상태고,
:
: matrix1은 bitdeque(128)이라서
:
: 컨테이너가 틀리는데 서로 copy가 될런지도 모르곘고요 쩝~
:
: 부분 복사 할려는데 잘 모르겠네요 좀 알려 주세요
:
: 참 그리고 김백일님~ STL 강좌좀 해주세요~
:
: 요즘 조금씩 하고 있는데 모르겠네요 강좌좀 해주세요~
:
:
:
:
|