![jumpstorydownload20200403000238 | Embarcadero RAD Studio Delphi C++Builder Blogs](https://i0.wp.com/blogs.embarcadero.com/wp-content/uploads/2020/08/jumpstory-download20200403-000238-1.jpg?resize=1140%2C694&ssl=1)
C ++ Builder 10.4 Sydney поддерживает стандарт ISO C ++ 17 в компиляторах на основе Clang для Win32 и Win64 . Часть стандарта C ++ 17 включает библиотеку алгоритмов, которая предоставляет политики выполнения для поддержки параллельных операций. Ниже вы найдете простой пример VCL, который использует C ++ std :: vector и политику сортировки библиотеки алгоритмов и параллельного выполнения для сортировки случайных целых чисел в векторе. В настоящее время этот пример компилируется с использованием базовых компиляторов Clang для 32- и 64-битной Windows.
Моя форма VCL содержит компоненты TButton, TLabel и два TMemo.
Обработчик событий при нажатии кнопки содержит простой код для создания вектора, его сортировки и отображения результатов.
#include <algorithm>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
#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)); } } |
Если вы хотите включить код для компиляторов, отличных от Clang и Clang, вы можете использовать в своих приложениях следующие директивы препроцессора #if, #elif, #else, #endif..
1 2 3 4 5 6 7 8 9 10 11 |
#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
Определена в заголовке <vector>
https://en.cppreference.com/w/cpp/container/vector
Библиотека алгоритмов
Библиотека алгоритмов расширяет функциональность стандартной библиотеки C ++. Эта библиотека определяет дополнительные функции для поиска, выборки, сортировки, подсчета, манипулирования, обобщенного суммирования и многого другого.
Определено в заголовке <algorithm>
https://en.cppreference.com/w/cpp/algorithm
Алгоритм сортировки
https://en.cppreference.com/w/cpp/algorithm/sort
Политики выполнения алгоритма
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag
Типы политик выполнения алгоритмов
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t
Design. Code. Compile. Deploy.
Start Free Trial Upgrade Today
Free Delphi Community Edition Free C++Builder Community Edition