Ícono del sitio Embarcadero RAD Studio, Delphi, & C++Builder Blogs

Uso de la biblioteca de algoritmos de C ++ 17 Clasificación en paralelo con C ++ Builder 10.4 Sydney para Win32 y Win64

C ++ Builder 10.4 Sydney es compatible con el estándar ISO C ++ 17 en los compiladores basados ​​en Clang para Win32 y Win64 . Parte del estándar C ++ 17 incluye la  biblioteca Algorithms  que proporciona políticas de ejecución para soportar operaciones paralelas. A continuación, encontrará un ejemplo de VCL simple que utiliza C ++ std :: vector y la política de ordenación y ejecución paralela de la biblioteca de algoritmos para ordenar enteros aleatorios en el vector. Este ejemplo se compila actualmente utilizando los compiladores base de Clang para Windows de 32 y 64 bits.

Mi formulario VCL contiene un TButton, TLabel y dos componentes TMemo.

El controlador de eventos Button on-click contiene el código simple para crear el vector, ordenarlo y mostrar los resultados.

#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-6763b7dd3d54b913590898/]

Si desea incluir código para compiladores que no sean Clang y Clang, puede usar las siguientes directivas de preprocesador #if, #elif, #else, #endif en sus aplicaciones.

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-6763b7dd3d553224525500/]

Referencias de C ++ 17 utilizadas en este ejemplo simple:

std :: vector

C ++ Containers library std :: vector
Definido en el encabezado <vector>
https://en.cppreference.com/w/cpp/container/vector

Biblioteca de algoritmos

La biblioteca de algoritmos agrega funcionalidad más allá de la biblioteca estándar de C ++. Esta biblioteca define funciones adicionales para buscar, muestrear, clasificar, contar, manipular, sumar generalizado y más.
Definido en el encabezado <algorithm>
https://en.cppreference.com/w/cpp/algorithm

Ordenar algoritmo
https://en.cppreference.com/w/cpp/algorithm/sort

Políticas de ejecución de algoritmos
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag

Tipos de políticas de ejecución de algoritmos
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t

Salir de la versión móvil