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


 

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 15504
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13974
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16509
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22069
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23289
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18934
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39279
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174737
163 단 한 줄의 코드로 완성하는 C++ CUSTOMER/SALES 애플리케이션 관리자 2020.11.09 408
162 인터베이스와 FireDac에서 배열필드 사용하기 file 김원경 2020.04.16 408
161 [C++빌더 신기능] C++ 리네임 리팩토링 관리자 2019.04.18 408
» C++17 알고리즘 라이브러리 병렬 정렬 사용하기 관리자 2020.08.13 407
159 TEMSDataSetResource 컴포넌트를 사용하여 RAD 서버의 마스터-디테일 데이터 구현하기 file 김원경 2020.03.06 407
158 [델파이 게임 개발] 겟잇(GETIT)에서 ALIEN INVASION 다운로드 받기 관리자 2020.11.30 406
157 [UX Summit 요약] 레거시 데스크탑 앱 UI/UX 현대화 – 이론부터 실제까지 (Legacy desktop apps UI & UX modernization. From theory to practice) 관리자 2020.11.04 406
156 새로운 VCL 윈도우 테마 - Lucky Point 관리자 2020.02.18 406
155 [10.3 리오][업데이트 2] 델파이 리눅스 클라이언트 애플리케이션 지원 관리자 2019.09.10 406
154 [마이그레이션] C++빌더 프로젝트 업데이트하기! 관리자 2020.09.17 404
153 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 4장. 다양한 UI 콘트롤 살펴보기 관리자 2020.02.04 404
152 [고객 사례- 의료, C++빌더, 모바일, IoT] 브루너 컨설팅, 손목 웨어러블 헬스케어 기기 관리자 2020.08.11 403
151 델파이 개발자를 위한 이더리움(Ethereum)! 관리자 2020.02.04 403
150 MODERNLISTVIEW 라이브러리 – 커스터마이징 가능한 강력한 크로스 플랫폼 라이브러리 활용 방법 관리자 2021.04.06 401
149 [도서/PDF] 한 번에 개발하는 안드로이드&iOS 앱 with 델파이 1편 - 3장(실습).사원 정보 프로토타입 앱 관리자 2020.02.04 399
148 이 달의 기술자료 - 2020년 01월 험프리 2019.12.26 398
147 [10.3 리오][업데이트 3] iOS 13, 맥OS 카탈리나 지원을 시작하세요. file 관리자 2019.11.22 397
146 [고객 사례- 델파이, 예술, 창작] 아트젠, 컴퓨터로 완성하는 미술 작품 관리자 2020.08.25 396
145 이 달의 기술자료 - 2018년 05월 file 험프리 2018.04.27 396
144 플루언트 디자인 시스템으로 애플리케이션 현대화하기 관리자 2021.04.08 393