C ++ Builder 10.4 Sydney 在基于Clang的Win32和Win64编译器中支持ISO C ++ 17标准。C ++ 17标准的一部分包括算法库 ,该 库提供执行策略以支持并行操作。在下面,您将找到一个简单的VCL示例,该示例使用C ++ std :: vector以及算法库的sort和parallel执行策略对vector中的随机整数进行排序。本示例当前使用Clang基本编译器针对32和64位Windows进行编译。
我的VCL窗体中包含一个TButton,TLabel和两个TMemo组件。欢迎加入Delphi开发局QQ群:32422310
Delphi控件源码下载网站

Button单击事件处理程序包含用于创建向量,对其进行排序并显示结果的简单代码。
#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预处理程序指令。
#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