2015-04-23 4 views
3

Есть ли STL контейнер с функциональностью аналогичной Delphi «набор», указанный ниже код взят из DelphiBasics:STL контейнерный эквивалент Delphi set?

type 
    TDigits = set of '1'..'9';  // Set of numeric digit characters 
var 
    digits : TDigits;    // Set variable 
    myChar : char; 
begin 
    digits := ['2', '4'..'7']; 

    // Now we can test to see what we have set on: 
    for myChar := '1' to '9' do 
     begin 
     if (myChar In digits) then 
      DoSomething() 
     else 
      DoSomethingElse(); 
     end; 
end; 
+1

Голосовать? Вау ... ты можешь хотя бы оставить комментарий ... Я здесь, чтобы учиться. – AlainD

+0

Три близких голоса за «непонятное, что вы просите». Если избиратели не знают Delphi - в этом случае, как они могут судить? - это очень четкий вопрос, с хорошим примером кода, который демонстрирует использование типа, в котором вы хотите получить эквивалент. Bizarre. –

+0

@DavidM: Согласен, очень странно. SO - отличный сайт в целом, но я думаю, что безумная погоня за репутацией может исказить принятие решений в отношении быстрого конца шкалы. – AlainD

ответ

7

Ближайший эквивалент в Delphi set of является STL std::bitset контейнера в заголовке <bitset>.

Сходства:

  • Вы можете установить свой диапазон в начале;
  • std::bitset::set = Include() в Delphi;
  • std::bitset::reset = Exclude() в Delphi;
  • std::bitset::test() - in в Delphi;
  • Вы можете использовать битовые операторы (|, &, <<, >>, ^ и т.д.).

Отличия:

  • В Delphi, максимальный размер set составляет 256 бит, так что если вы хотите, чтобы создать больший набор, вы должны использовать что-то вроде array [1..N] of set of byte. В C++ std::bitset не имеет этого ограничения;
  • В Delphi, set биты включены/исключены по значению. В C++, std::bitset биты устанавливаются/сбрасываются по индексу.
+0

Отлично, спасибо. Именно то, что я искал ... – AlainD