zoukankan      html  css  js  c++  java
  • 详测 Generics Collections TQueue (3): OnNotify、Extract

    unit Unit1;
    
    interface
    
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Generics.Collections;
    
    type
      TForm1 = class(TForm)
        Button1: TButton;
        procedure Button1Click(Sender: TObject);
      private
        procedure MyQueueNotify(Sender: TObject; const Item: Integer;
          Action: TCollectionNotification);
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    //uses Generics.Collections;
    
    {准备给 TQueue.OnNotify 调用的事件过程}
    procedure TForm1.MyQueueNotify(Sender: TObject; const Item: Integer;
      Action: TCollectionNotification);
    begin
      case Action of
        cnAdded     : ShowMessageFmt('Add: %d', [Item]);
        cnRemoved   : ShowMessageFmt('Remove: %d', [Item]);
        cnExtracted : ShowMessageFmt('Extract: %d', [Item]);
      end;
    end;
    
    procedure TForm1.Button1Click(Sender: TObject);
    var
      Queue: TQueue<Integer>;
    begin
      Queue := TQueue<Integer>.Create();
      Queue.OnNotify := MyQueueNotify;
    
      Queue.Enqueue(11); {Add: 11}
      Queue.Enqueue(22); {Add: 22}
      Queue.Enqueue(33); {Add: 33}
    
      Queue.Dequeue;     {Remove: 11}
    
      // Extract 和 Dequeue 功能一致, 区别只是在驱动 OnNotify 事件时传递的参数有区别, 没多大意义
      Queue.Extract;     {Extract: 22}
    
      //Queue.OnNotify := nil;
    
      Queue.Free;        {Remove: 33}
    end;
    
    end.
    
  • 相关阅读:
    ●BZOJ 2752 [HAOI2012]高速公路(road)
    ●UVA 11021 tunnello
    ●POJ 2794 Double Patience
    【51Nod1555】布丁怪
    【LG1600】[NOIP2016]天天爱跑步
    【LG5171】Earthquake
    【LG4437】[HNOI/AHOI2018]排列
    【CF1097F】Alex and a TV Show
    【51Nod 1769】Clarke and math2
    【LG5330】[SNOI2019]数论
  • 原文地址:https://www.cnblogs.com/del/p/1580881.html
Copyright © 2011-2022 走看看