C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 강좌/문서
C++Builder Programming Tutorial&Docments
[196] [Boost 살펴보기] 5. lexical_cast
Lyn [tohnokanna] 16240 읽음    2009-05-12 11:19
원본출처
http://lunapiece.net/3800

이번엔 lexical_cast 에 대해서 알아보자.
cast 란 이름에서 눈치챗겠지만 일종의 캐스팅 연산자(인 척 하는 함수) 이다.
string -> Integer 같은 상식적으론 말이 되지만 C++문법상으론 말이 안되는 일들을 처리한다.

일단 예제코드를 소개한다.
timer 에 관해서는
http://lunapiece.net/3795 를 참조해라

#include <boost/lexical_cast.hpp>
#include <cstdlib>
#include <string>
#include <boost/timer.hpp>

using namespace std;
using namespace boost;

string Number = "1024768";

void StrToIntAtoi()
{
    int num;
    for(int i=0;i < 1000000; ++i)
    {
        num = atoi(Number.c_str());
    }
    printf("atoi : %d\n", num);
}
void StrToIntStringStream()
{
    stringstream sst;
    int Num;
    for(int i=0;i < 1000000; ++i)
    {
        sst << Number.c_str();
        sst >> Num;
    }
    printf("StringStream : %d\n", Num);
}
void StrToIntLexicalCast()
{
    int num;
    for(int i=0;i < 1000000; ++i)
    {
        num = lexical_cast<int>(Number);
    }
    printf("LexicalCast : %d\n", num);
}
int _tmain(int argc, _TCHAR* argv[])
{
    timer t;
    printf("atoi 를 이용 한 방법\n");
    t.restart();
    StrToIntAtoi();
    printf("%lf 초\n", t.elapsed());

    printf("StringStream 을 이용 한 방법\n");
    t.restart();
    StrToIntStringStream();
    printf("%lf 초\n", t.elapsed());

    printf("lexical_cast 를 이용 한 방법\n");
    t.restart();
    StrToIntLexicalCast();
    printf("%lf 초\n", t.elapsed());

    return 0;
}

.....

예제코드 자체는 별 문제가 없었으리라 본다. 준비작업도 필요없고 간단하게 쓸 수 있어서 참 좋아보이기는 한다.
하나의 함수로 이런저런 캐스팅을  다 할수 있으니 다형성도 뛰어나다.
그러나 치명적인 문제가 딱 하나 있는데...


첨부파일에 있듯이 바로 속도 =_=;

stringstream 에 비해 약 10배, atoi 에 비해선 대략 50배 가량 느리다 =_=;; 편의성을 위해서 가끔 쓰는정도라면 몰라도 자주 반복되는 루틴에서는 쓰지 않아야 하겠다.
한빈짱 [hanbinjjang1]   2009-05-28 17:33 X
#include <vcl.h>
String Number2 = "1024768";
void VCLStrToInt()
{
    int num;
    for(int i=0;i < 1000000; ++i)
    {
        num = StrToInt(Number2);
    }
    printf("StrToInt : %d\n", num);
}

vcl의 StrToInt함수를 사용하니 atoi보다 빠르게 나오네요.;;

+ -

관련 글 리스트
196 [Boost 살펴보기] 5. lexical_cast Lyn 16240 2009/05/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.