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

Utilisation de la bibliothèque d’algorithmes C ++ 17 tri parallèle avec C ++ Builder 10.4 Sydney pour Win32 et Win64

C ++ Builder 10.4 Sydney prend en charge la norme ISO C ++ 17 dans les compilateurs basés sur Clang pour Win32 et Win64 . Une partie de la norme C ++ 17 inclut la  bibliothèque d’algorithmes  qui fournit des stratégies d’exécution pour prendre en charge les opérations parallèles. Vous trouverez ci-dessous un exemple de VCL simple qui utilise le C ++ std :: vector et la politique de tri et d’exécution parallèle de la bibliothèque d’algorithmes pour trier les entiers aléatoires dans le vecteur. Cet exemple se compile actuellement à l’aide des compilateurs de base Clang pour Windows 32 et 64 bits.

Mon formulaire VCL contient un TButton, un TLabel et deux composants TMemo.

Le gestionnaire d’événements Button on-click contient le code simple pour créer le vecteur, le trier et afficher les résultats.

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

Si vous souhaitez inclure du code pour des compilateurs non-Clang et Clang, vous pouvez utiliser les directives de préprocesseur #if, #elif, #else, #endif suivantes dans vos applications.

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

Références C ++ 17 utilisées dans cet exemple simple:

std :: vecteur

Bibliothèque de conteneurs C ++ std :: vector
Défini dans l’en-tête <vector>
https://en.cppreference.com/w/cpp/container/vector

Bibliothèque d’algorithmes

La bibliothèque d’algorithmes ajoute des fonctionnalités au-delà de la bibliothèque C ++ standard. Cette bibliothèque définit des fonctions supplémentaires pour la recherche, l’échantillonnage, le tri, le comptage, la manipulation, la sommation généralisée et plus encore.
Défini dans l’en-tête <algorithm>
https://en.cppreference.com/w/cpp/algorithm

Algorithme de tri
https://en.cppreference.com/w/cpp/algorithm/sort

Politiques d’exécution de l’algorithme
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag

Types de politique d’exécution d’algorithme
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t

Quitter la version mobile