RAD Studio 10.4.1 is now available! Learn more. Looking for discounts? Visit our Special Offers page!
News

Using C++17 Algorithms Library Parallel Sorting with C++Builder 10.4 Sydney for Win32 and Win64

C++Builder 10.4 Sydney supports the ISO C++17 standard in the Clang based compilers for Win32 and Win64. Part of the C++17 standard includes the Algorithms library that provides execution policies to support parallel operations. Below you will find a simple VCL example that uses the C++ std::vector and the algorithms library sort and parallel execution policy to sort random integers in the vector. This example currently compiles using the Clang base compilers for 32 and 64 bit Windows.

My VCL form contains a TButton, TLabel and two TMemo components.

pastedimage1597072022306v1-3966634

The Button on-click event handler contains the simple code to create the vector, sort it and display the results.

#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

If you want to include code for non-Clang and Clang compilers, you can use the following #if, #elif, #else, #endif preprocessor directives in your 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

C++ 17 References used in this simple example:

std::vector

C++ Containers library std::vector
Defined in header <vector>
https://en.cppreference.com/w/cpp/container/vector

Algorithms library

The algorithms library adds functionality beyond the standard C++ library. This library defines additional functions for searching, sampling, sorting, counting, manipulating, generalized summing and more.
Defined in header <algorithm>
https://en.cppreference.com/w/cpp/algorithm

Sort algorithm
https://en.cppreference.com/w/cpp/algorithm/sort

Algorithm execution policies
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag

Algorithm execution policy types
https://en.cppreference.com/w/cpp/algorithm/execution_policy_tag_t


Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Start Free Trial   Learn More About Upgrading

Related posts
C++CodeDelphi

Learn To Build A Python GUI For Working With The Numpy Library In A Delphi Windows App

C++Code

Learn About Using Right Angle Brackets In This C++11 Feature For Windows Development

C++DelphiRAD Studio

Learn How To Use WinRT In Your Native Windows Delphi And C++ Builder Apps

News

Using Python4Delphi with C++Builder (webinar)

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.

IN THE ARTICLES