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
[75610] Re:Re:Re: C++17 테크닉 이용해서 간단하게 구현하는 방법
질문 [] 2155 읽음    2019-09-23 16:57
빌더님 도움 많이 받고 있는 눈팅이 인데요
벡터일 때는 stl을 어떤식으로 이용해야 하는지
그리고 stl 책 추천 좀 부탁 드립니다


빌더(TWx) 님이 쓰신 글 :
: gksqjs94 님이 쓰신 글 :
: :     for(int i = 10; i> -11; i--)
: :     {
: :         TDateTime day = Now();
: :         day = IncYear(day,-i);
: :         Year->Items->Add(day.FormatString("yyyy"));
: :     }
: :     Year->ItemIndex=10;
: :
: :
: : ... 이렇게 하니까 됐네요
: :
: :
: :
: : gksqjs94 님이 쓰신 글 :
: : : 안녕하세요
: : : 제가 하고싶은건 지금 년도 에서 1~10 년 전이랑 1~10년후 까지 하나의 콤보박스에 넣고 현재 년도를 기본인덱스로 설정하고싶어요.
: : :
: : :     int j = 0;
: : :     for(int i = 1; i< 22; i++)
: : :     {
: : :         TDateTime day = Now();
: : :         TDateTime day2 =Now();
: : :         if(i<11)
: : :         {
: : :             day = IncYear(day,-i);
: : :             Year->Items->Add(day.FormatString("yyyy"));
: : :         }
: : :         else
: : :         {
: : :             day2 = IncYear(day2,j);
: : :             Year->Items->Add(day2.FormatString("yyyy"));
: : :             j++;
: : :         }
: : :     }
: : : 이렇게 짜니까 들어가긴하는데 코드도 더러워보이고 딱봐도 뭔가 어거지로 맞춘듯한 느낌이들어요 ..ㅠ
: : : 어떻게 하면 깔끔히 짤수 있을까요 ?
: : :
: : : ps .그리고 저렇게 넣으면 2009년부터 2019년까지 아래에서 위로 올라가고 2020년부터 다시 2009년부터 아래로 써지더라구요
: : : 위에 한줄은 제가 읽어도 이해가 잘되지않네요..
: : :
:
:
:
: 답변:
:
:
: 아래와 같이 헤더 포함하고... C++17 테크닉 이용해서 간단하게 구현할 수 있지요.
: std::stringstream, std::generate_n, std::string은 STL template으로 정의되어 있음.
:
:
: #include <algorithm>
: #include <sstream>
: #include <string>
: using namespace std;
: using OI = std::ostream_iterator< WORD >;
:
:
:   SYSTEMTIME dt; GetLocalTime(&dt);
:   stringstream ss;
:   generate_n((dt.wYear -= 10, OI(ss, "\n")), 21, [&dt]() { return dt.wYear++;});
: 
:   ComboBox1->Items->Text = ss.str().c_str();
:   ComboBox1->ItemIndex = 10;
: 

:
: 소스코드가 상당히 간단한데, 굳이 설명을 하자면...
:
: 현재 연도 기준으로 +- 10년을 사용하므로... 도합 21개의 Item이 사용되는 거고...
: TComboBox의 ItemIndex는 zero 베이스 이므로... 현재 연도 인덱스는 10이 되고.
:
: std::stringstream은 Container가 아닌 plain 스트림 클래스이므로...
: back_inserter 대신, std::ostream_iterator<> Iterator를 사용해야 하고.
:
: VCL 프레임웍이 파스칼이 아닌 C++로 구현되어 있으면 5번 라인은 전혀 필요없으나
: VCL 프레임웍이 파스칼로 구현되어 있기 때문에 어쩔수 없이 사용돼야 하고.
:
: C++17 테크닉 이용해서 VCL 프레임웍을 구현하면, 파스칼로 구현되어 있는 것 보다
: 3분의1로 크기를 확 줄여서 더 작고 효율적인 프레임웍 구현이 가능할 텐데...
:
: 지금까지 엠바 돌아가는 꼬라지를 보아서는 의미 없는 기대.
:
:
: 델파이 프레임웍에 의존성을 갖고있는 이와 같은 기형적인 구조에서는...
: C++20, C++24가 나온다고 하더라도...
:
: module, concept, range 등의 C++ 랭귀지 파워를 프레임웍 레벨에서 써 먹을 수 없는 구조
:
:

+ -

관련 글 리스트
75586 날짜 더하는 코드간단(?)화 질문이요 gksqjs94 2146 2019/09/18
75587     Re:날짜 더하는 코드간단(?)화 질문이요 gksqjs94 2155 2019/09/18
75590         Re:Re: C++17 테크닉 이용해서 간단하게 구현하는 방법 빌더(TWx) 2265 2019/09/19
75610             Re:Re:Re: C++17 테크닉 이용해서 간단하게 구현하는 방법 질문 2155 2019/09/23
75588         Re:Re:날짜 더하는 코드간단(?)화 질문이요 정성훈.해미 2171 2019/09/18
75589             Re:Re:Re:날짜 더하는 코드간단(?)화 질문이요 gksqjs94 2148 2019/09/18
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.