首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C++Builder 集合操作實戰:TShiftState 與 Set 模板類別應用

     編輯:關於C++

一、TShiftState 實際案例

滑鼠事件 OnMouseDown 參數 Shift: TShiftState 即為集合型別:

enum TShiftStateEnum { ssShift, ssAlt, ssCtrl, ssLeft, ssRight, ssMiddle, ssDouble };
typedef Set TShiftState;

檢查元素是否存在

void CheckState(TShiftState Shift) {
    ShiftKey->Checked   = Shift.Contains(ssShift);
    ControlKey->Checked = Shift.Contains(ssCtrl);
    LeftButton->Checked = Shift.Contains(ssLeft);
    RightButton->Checked= Shift.Contains(ssRight);
}

二、運行期建立與操作集合

TShiftState LeftShift;
LeftShift << ssLeft << ssShift; // 插入元素(運算子 <<)

// 集合運算
TShiftState LeftCtrl;
LeftCtrl << ssLeft << ssCtrl;

TShiftState UnionSet      = LeftShift + LeftCtrl; // 聯集 {ssLeft, ssShift, ssCtrl}
TShiftState IntersectSet  = LeftShift * LeftCtrl; // 交集 {ssLeft}
TShiftState DiffSet       = LeftShift - LeftCtrl; // 差集 {ssShift}

運算子回傳值

  • +、-、* 回傳新集合。
  • Contains() 回傳 bool。

三、SETEXP 範例程式完整碼

#include 
#pragma hdrstop
#include "Main.h"
#pragma resource "*.dfm"
TForm1 *Form1;

__fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) {}

void TForm1::CheckState(TShiftState Shift) {
    ShiftKey->Checked   = Shift.Contains(ssShift);
    ControlKey->Checked = Shift.Contains(ssCtrl);
    LeftButton->Checked = Shift.Contains(ssLeft);
    RightButton->Checked= Shift.Contains(ssRight);
}

void __fastcall TForm1::UnionClick(TObject *Sender) {
    AnsiString Ops[3] = {"+", "*", "-"};
    TShiftState FinalSet, LeftShift, LeftCtrl;
    LeftShift << ssLeft << ssShift;
    LeftCtrl  << ssLeft << ssCtrl;

    switch (TOptType(dynamic_cast(Sender)->Tag)) {
        case otUnion:        FinalSet = LeftShift + LeftCtrl; break;
        case otIntersection: FinalSet = LeftShift * LeftCtrl; break;
        case otDifference:   FinalSet = LeftShift - LeftCtrl; break;
    }
    CheckState(FinalSet);
    Label2->Caption = Ops[dynamic_cast(Sender)->Tag];
}

void __fastcall TForm1::Label4MouseDown(TObject *Sender, TMouseButton Button,
    TShiftState Shift, int X, int Y) {
    CheckState(Shift); // 即時顯示鍵盤/滑鼠狀態
}

四、介面配置

  • 4 個 TCheckBox(ShiftKey, ControlKey, LeftButton, RightButton)置於 TPanel1。
  • TPanel2 上放 TLabel4(接收 OnMouseDown)。
  • 3 個 TBitBtn(Tag 分別 0/1/2 對應聯集/交集/差集),共用 UnionClick。
  • TLabel2 顯示目前運算子符號。

五、Set 模板關鍵特性總結

操作語法說明
插入元素set << elem編譯期/運行期皆可
移除元素set >> elem較少用
檢查成員set.Contains(elem)回傳 bool
聯集set1 + set2回傳新集合
交集set1 * set2回傳新集合
差集set1 - set2回傳新集合
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved