Site icon Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Использование параллельной сортировки библиотеки алгоритмов C ++ 17 с C ++ Builder 10.4 Sydney для Win32 и Win64

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>

#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();
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[crayon-6763b89830d1b438361045/]

Если вы хотите включить код для компиляторов, отличных от Clang и Clang, вы можете использовать в своих приложениях следующие директивы препроцессора #if, #elif, #else, #endif..

Fullscreen

 

#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
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

[crayon-6763b89830d24648867958/]

Ссылки на 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

Exit mobile version