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
[18091] Re:[만해] STL인데요 좀 봐주세요
김백일 [cedar] 1099 읽음    2002-05-02 05:11
만해 님이 쓰신 글 :
: 안녕하세요 만해 입니다.
:
: 제가 하고 있는 암호화를 위해서 비트 어래이가 필요해서요
:
: 막뒤지던중
:
: STL의 BVetcor이란게 있어서 한번 테스트 해볼려고 하는데요
:
: 빌더의 헬프에 있는걸 그래도 적어 놓고 하는건데요
:
: 이게 for문에서 바로 에러가 나네요
:
: 뭐가 잘 못 된건지 좀 알려 주세요~
:
: 흑흑
:
: 결국 bit Array는 포기 해야 하는건가 흑~

#pragma hdrstop 위치가 틀렸습니다.

STL은 Standard "Template Library",
즉 헤더파일로만 이루어진 라이브러리(lib이나 dll 같은 것이 없습니다.)입니다.
(당근, 오픈소스일 수 밖에는 없죠. ^^;)
즉, 모든 코드가 컴파일 타임에 매번 새로 생성되는 구조입니다.
그러므로 헤더파일을 precompiled header로 놓을 수 없습니다.
STL의 몇 개 안되는 단점중 하나를 들자면 컴파일 타임이 오래걸린다는 거죠.
다른 헤더 파일을 먼저 인클루드 하신 후,
#pragma hdrstop 을 놓고, 그 다음에 STL 헤더파일들을 인클루드하셔야 합니다.

저도 처음엔 이걸 몰라서 한참 고생하다 알아냈습니다.

  //#include <vcl.h> <- 이건 지금 필요 없겠죠?
  //#include <conio.h> <- 이것도...
  #pragma hdrstop // 여기다 선언해야 합니다.
: #include <iostream>
: #include <vector>
  //#include "stl/_bvector.h" <- 이것도 필요없습니다.
  //#pragma hdrstop <- 틀림!
  using namespace std; // 이건 반드시 필요합니다!
: //---------------------------------------------------------------------------
: #pragma argsused
: int main(int argc, char* argv[])
: {
:   bit_vector V(5);
:   V[0] = true;
:   V[1] = false;
:   V[2] = false;
:   V[3] = true;
:   V[4] = false;
:
:   for (bit_vector::iterator i = V.begin(); i < V.end(); ++i)
:     cout << (*i ? '1' : '0'); // <- 여기서 처음부터 바로 에러가 나네요
:   cout << endl;
:
:   //getch();
:   return 0; // 저는 getch() 대신에 이 위치에 브레이크 포인트를 잡는 방법을 애용합니다.
: }

여기서 bit_vector란 것은 vector<bool>을 typedef한 겁니다.
그런데 이 vector<bool>에는 심각한 단점이 있기 때문에 절대 쓰지 마시고,
대신 bitset이나 deque<bool>을 쓰실 것을 강력히 권합니다.
bitset은 STL 컨테이너는 아니지만(그래서 STL 책에는 설명이 빠져 있습니다.)
ANSI C++ 라이브러리에는 속해 있습니다.
STL 컨테이너가 아니기 때문에 크기 변경이나 반복자, 알고리듬 등을 지원하지 않지만
비트 조작에 매우 편리한 멤버 함수들을 제공하는 장점이 있습니다.
만약, STL 컨테이너로서의 성질을 써야 한다면
deque<bool>을 쓰시면 되고요.
자세한 내용은 Effective STL(번역판 나온 건 아시죠?) 항목 18에 나와있습니다.

다음은 빌더6 STLport 헬프에 있는 예제 코드입니다. 참고하시길...

  const bitset<12> mask(2730ul);
  cout << "mask =      " << mask << endl;

  bitset<12> x;

  cout << "Enter a 12-bit bitset in binary: " << flush;
  if (cin >> x) {
    cout << "x =        " << x << endl;
    cout << "As ulong:  " << x.to_ulong() << endl;
    cout << "And with mask: " << (x & mask) << endl;
    cout << "Or with mask:  " << (x | mask) << endl;
  }




+ -

관련 글 리스트
18090 [만해] STL인데요 좀 봐주세요 만해 771 2002/05/02
18091     Re:[만해] STL인데요 좀 봐주세요 김백일 1099 2002/05/02
18101         Re:Re:[만해] STL인데요 좀 봐주세요 만해 840 2002/05/02
18111             Re:Re:Re: begin() - 6이 아니라 end() - 6이죠. 김백일 800 2002/05/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.