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
[18210] Re:[만해] 또 STL요~ 흑
돈데크만 [dontechman] 818 읽음    2002-05-06 21:42
책보셨으면 아시겠지만, 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 강좌좀 해주세요~
:
:   요즘 조금씩 하고 있는데 모르겠네요 강좌좀 해주세요~
:
:
:  
:

+ -

관련 글 리스트
18197 [만해] 또 STL요~ 흑흑~ 만해 768 2002/05/06
30023     Re:[만해] 또 STL요~ 흑흑~ 돈데크만 725 2002/05/06
18210     Re:[만해] 또 STL요~ 흑 돈데크만 818 2002/05/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.