데이비드 아이가 작성한 글을 번역한 글입니다.


 

C++빌더 10.4 시드니는 ISO C++17 표준을 지원합니다. Win32와 Win64용 Clang 기반 컴파일러에서 사용할 수 있습니다. C++17 표준은 알고리즘 라이브러리를 제공합니다. 이를 통해 실행 정책(Execution Policies)을 활용해 병렬성을 활용할 수 있게 되었습니다. 아래 간단한 VCL 예제를 참고해보세요. C++ std::vector와 알고리즘 라이브러리 정렬, 병렬성 실행 정책을 활용해 벡터에서 임의로 작성된 정수들을 정렬하는 예제입니다. 

 

VCL 폼에 TButton, TLabel, 두개의 TMemo 컴포넌트를 올려놓습니다.

 

 

버튼의 on-click 이벤트 핸들러에 간단한 코드를 작성해보겠습니다.

이 코드는 벡터 생성, 정렬, 결과값을 보여주기 위한 것입니다.

#include <algorithm>

#include <vector>

void __fastcall TForm1::Button1Click(TObject *Sender)

{

     const int max_data = 1000;   // number of random numbers to create
    Memo1->Lines->Clear();
    Memo2->Lines->Clear();
    Label1->Caption = "Building Random Data";
    Label1->Update();

     // fill the vector with random numbers and save them in Memo1
    std::vector<int> my_data;

     for (int i = 1; i <= max_data; i++) {
          int random_value = Random(max_data);
          my_data.push_back(random_value);
          Memo1->Lines->Add(IntToStr(random_value));
     }

     Label1->Caption = "Sorting Random Data";
     Label1->Update();

     // sort the random numbers in the vector
     std::sort(std::execution::par,my_data.begin(),my_data.end());

     // put the sorted vector in Memo2
     Label1->Caption = "Sorting Completed";
     Label1->Update();
     for(int n : my_data) {
          Memo2->Lines->Add(IntToStr(n));
      }
}

 
non-Clnag과 Clang 컴파일러용 코드를 활용하고 싶다면 #if, #eif, #else, #endif 전처리 지시문을 사용하면 됩니다.
#if defined(__clang__)
     #if (__clang_major__ == 5 && __clang_minor__ == 0)
          #warning "clang major = 5 and clang minor = 0"
     #elif (__clang_major__ == 3 && __clang_minor__ == 3)
          #warning "clang major = 3 and clang minor = 3"
     #else
          #warning "Unable to determine correct clang header version"
     #endif

#else
     #warning "not a clang compiler"
#endif

 

 
C++17 관련 간단한 예제들
 
std::vector
C++ 컨테이너 라이브러리 std::vector
 
 
알고리즘 라이브러리
 
 
정렬 알고리즘
 
 
알고리즘 실행 정책(Execution Policies)
 
 
알고리즘 실행 정책 타입들
 
 
 
 
 
 

 

 

 

 

 

번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15669
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 14089
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16620
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22204
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23507
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 19051
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39471
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174883
163 RAD Studio XE3, 델파이XE3, C++빌더XE3 용 핫픽스(Hotfix)4가 나왔습니다. 관리자 2012.10.30 5709
162 [델파이 문법] 문법 요소 #7 file 관리자 2012.10.29 5796
161 [델파이 문법] 문법 요소 #6 file 관리자 2012.10.25 5347
160 [웹세미나] 파이어몽키용 TMS Grid와 비주얼 라이브바인딩을 활용한 멀티-티어 애플리케이션 개발 관리자 2012.10.23 5015
159 델파이/C++빌더 XE3 수정된 버그 리스트가 올라왔습니다. 관리자 2012.10.23 5758
158 [델파이 문법] 문법 요소 #5 file 관리자 2012.10.22 5640
157 [델파이 문법] 문법 요소 #4 file 관리자 2012.10.19 6856
156 David I의 31 XE3 퀵 비디오 - HTML5 빌더의 Canvas, Storage, Audio/Video 지원 관리자 2012.10.18 5326
155 [델파이 문법] 문법 요소 #3 file 관리자 2012.10.16 7179
154 David I의 31 XE3 퀵 비디오 - HTML5 빌더로 클라이언트 모바일 앱 개발하기 관리자 2012.10.15 5901
153 David I의 31 XE3 퀵 비디오 - FM2 Ancors 프로퍼티, FlowLayout과 GridLayout 관리자 2012.10.12 5485
152 [웹세미나 비디오] Delphi XE3와 HTML5 Builder의 새로워진 기능 관리자 2012.10.09 5980
151 RAD Studio XE3와 SQLite 관리자 2012.10.09 6328
150 David I의 31 XE3 퀵 비디오 - FM2로 오디오 및 비디오 캡쳐 기능 만들기 관리자 2012.10.09 5414
149 David I의 31 XE3 퀵 비디오 - FM2 미디어 플레이어 컴포넌트 활용하기 관리자 2012.10.08 5949
148 David I의 31 XE3 퀵 비디오 - 윈도우8 스타일 사용하기 관리자 2012.10.08 6160
147 XE3 - Hotfix가 올라왔습니다. 관리자 2012.10.05 4762
146 파이어몽키용 TMS 그리드의 간략한 소개 백서 관리자 2012.09.26 6868
145 RAD Studio 모바일 로드맵 공개 관리자 2012.09.21 4828
144 [델파이 문법] 문법 요소 #2 file 관리자 2012.09.20 6553