Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.6. ΠΠ΅ΡΠ΅ΠΏΠΈΡΠΈΡΠ΅ ΡΡΠ½ΠΊΡΠΈΡ findBook() ΡΠ°ΠΊ, ΡΡΠΎΠ±Ρ ΠΎΠ½Π° Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»Π° ΠΊΠΎΡΡΠ΅ΠΆ ΠΈΠ»ΠΈ ΠΏΠ°ΡΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.7. ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅, ΠΊΠ°ΠΊΡΡ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ findBook() Π²Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Π΅ΡΠ΅ ΠΈ ΠΏΠΎΡΠ΅ΠΌΡ.
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.8. Π§ΡΠΎ Π±ΡΠ΄Π΅Ρ, Π΅ΡΠ»ΠΈ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΡΠ΅ΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡΠ° Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° accumulate() Π² ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΊΠΎΠ΄Π° ΡΡΠΎΠ³ΠΎ ΡΠ°Π·Π΄Π΅Π»Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΊΠ»Π°ΡΡΠ° Sales_data?
17.2. Π’ΠΈΠΏ bitset
Π ΡΠ°Π·Π΄Π΅Π»Π΅ 4.8 ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΠΈΠ΅ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΡΠΉ ΠΎΠΏΠ΅ΡΠ°Π½Π΄ ΠΊΠ°ΠΊ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡ Π±ΠΈΡΠΎΠ². ΠΠ»Ρ ΠΎΠ±Π»Π΅Π³ΡΠ΅Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π±ΠΈΡΠΎΠ²ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΈ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ Ρ ΠΊΠΎΠ»Π»Π΅ΠΊΡΠΈΡΠΌΠΈ Π±ΠΈΡΠΎΠ², ΡΠ°Π·ΠΌΠ΅Ρ ΠΊΠΎΡΠΎΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°ΠΌΠΎΠ³ΠΎ Π΄Π»ΠΈΠ½Π½ΠΎΠ³ΠΎ ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ ΡΠΈΠΏΠ°, ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ ΠΊΠ»Π°ΡΡ bitset (Π½Π°Π±ΠΎΡ Π±ΠΈΡΠΎΠ²). ΠΠ»Π°ΡΡ bitset ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ Π² Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ bitset.
17.2.1. ΠΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Π±ΠΎΡΠΎΠ² Π±ΠΈΡΠΎΠ²
Π‘ΠΏΠΈΡΠΎΠΊ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΠΎΠ² ΡΠΈΠΏΠ° bitset ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½ Π² ΡΠ°Π±Π». 17.2. Π’ΠΈΠΏ bitset β ΡΡΠΎ ΡΠ°Π±Π»ΠΎΠ½ ΠΊΠ»Π°ΡΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ, ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠ»Π°ΡΡΡ array, ΠΈΠΌΠ΅Π΅Ρ ΡΠΈΠΊΡΠΈΡΠΎΠ²Π°Π½Π½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 3.3.6). ΠΡΠΈ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠΈ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² ΡΠ»Π΅Π΄ΡΠ΅Ρ ΡΠΊΠ°Π·Π°ΡΡ Π² ΡΠ³Π»ΠΎΠ²ΡΡ ΡΠΊΠΎΠ±ΠΊΠ°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ:
bitset<32> bitvec(1U); // 32 Π±ΠΈΡΠ°; ΠΌΠ»Π°Π΄ΡΠΈΠΉ Π±ΠΈΡ 1, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±ΠΈΡΡ 0
Π Π°Π·ΠΌΠ΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ ΡΠΊΠ°Π·Π°Π½ ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ½ΡΠΌ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠ΅ΠΌ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 2.4.4). ΠΡΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ Π½Π°Π±ΠΎΡ Π±ΠΈΡΠΎΠ² bitvec, ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΠΈΠΉ 32 Π±ΠΈΡΠ°. ΠΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠ»Π΅ΠΌΠ΅Π½ΡΠ°ΠΌ Π²Π΅ΠΊΡΠΎΡΠ°, Π±ΠΈΡΡ Π² Π½Π°Π±ΠΎΡΠ΅ Π±ΠΈΡΠΎΠ² Π½Π΅ ΠΈΠΌΠ΅ΡΡ ΠΈΠΌΠ΅Π½. ΠΠΎΡΡΡΠΏ ΠΊ Π½ΠΈΠΌ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ. ΠΡΠΌΠ΅ΡΠ°ΡΠΈΡ Π±ΠΈΡΠΎΠ² Π½Π°ΡΠΈΠ½Π°Π΅ΡΡΡ Ρ 0. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π±ΠΈΡΡ Π½Π°Π±ΠΎΡΠ° bitvec ΠΏΡΠΎΠ½ΡΠΌΠ΅ΡΠΎΠ²Π°Π½Ρ ΠΎΡ 0 Π΄ΠΎ 31. ΠΠΈΡΡ, ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΡΠ΅ Π±Π»ΠΈΠΆΠ΅ ΠΊ Π½Π°ΡΠ°Π»Ρ (ΠΊ 0), Π½Π°Π·ΡΠ²Π°ΡΡΡΡ ΠΌΠ»Π°Π΄ΡΠΈΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ (low-order), Π° Π±Π»ΠΈΠΆΠ΅ ΠΊ ΠΊΠΎΠ½ΡΡ (ΠΊ 31) β ΡΡΠ°ΡΡΠΈΠΌΠΈ Π±ΠΈΡΠ°ΠΌΠΈ (high-order).
Π’Π°Π±Π»ΠΈΡΠ° 17.2. Π‘ΠΏΠΎΡΠΎΠ±Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ²
bitset<n> b; ΠΠ°Π±ΠΎΡ b ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ n Π±ΠΈΡΠΎΠ², ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0. ΠΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ constexpr (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 7.5.6) bitset<n> b(u); ΠΠ°Π±ΠΎΡ b ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠΏΠΈΡ n ΠΌΠ»Π°Π΄ΡΠΈΡ Π±ΠΈΡΠΎΠ² Π·Π½Π°ΡΠ΅Π½ΠΈΡ u ΡΠΈΠΏΠ° unsigned long long. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ n Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΡΠΈΠΏΠ° unsigned long long, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈΠ΅ Π±ΠΈΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π½Π° Π½ΡΠ»Ρ. ΠΡΠΎ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡ constexpr (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 7.5.6) bitset<n> b(s, Ρos, m, zero, one); ΠΠ°Π±ΠΎΡ b ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠΎΠΏΠΈΡ m ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈΠ· ΡΡΡΠΎΠΊΠΈ s, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ pos. Π‘ΡΡΠΎΠΊΠ° s ΠΌΠΎΠΆΠ΅Ρ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π΄Π»Ρ Π½ΡΠ»Π΅ΠΉ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡ; Π΅ΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° s ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ Π»ΡΠ±ΠΎΠΉ Π΄ΡΡΠ³ΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ», ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ invalid_argument. Π‘ΠΈΠΌΠ²ΠΎΠ»Ρ Ρ ΡΠ°Π½ΡΡΡΡ Π² Π½Π°Π±ΠΎΡΠ΅ b ΠΊΠ°ΠΊ Π½ΡΠ»ΠΈ ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΡ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ pos ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 0, ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ m β string::npos, zero β '0' ΠΈ one β '1' bitset<n> b(cp, pos, m, zero, one); ΠΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅ΠΌΡ ΠΊΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ, Π½ΠΎ ΠΊΠΎΠΏΠΈΡΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΠΌΠ°ΡΡΠΈΠ², Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ ΡΠΊΠ°Π·ΡΠ²Π°Π΅Ρ cp. ΠΡΠ»ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ m Π½Π΅ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ, cp Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡ Π½Π° ΡΡΡΠΎΠΊΡ Π² ΡΡΠΈΠ»Π΅ Π‘. ΠΡΠ»ΠΈ m ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½ΠΎ, ΡΠΎ Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ cp Π² ΠΌΠ°ΡΡΠΈΠ²Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±ΡΡΡ ΠΏΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅ΡΠ΅ m ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΡ Π½ΡΠ»ΡΠΌ ΠΈΠ»ΠΈ Π΅Π΄ΠΈΠ½ΠΈΡΠ°ΠΌ ΠΠΎΠ½ΡΡΡΡΠΊΡΠΎΡΡ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΡΡΠΎΠΊΡ ΠΈΠ»ΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΡΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ, ΡΠ²Π»ΡΡΡΡΡ ΡΠ²Π½ΡΠΌΠΈ (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 7.5.4). Π Π½ΠΎΠ²ΠΎΠΌ ΡΡΠ°Π½Π΄Π°ΡΡΠ΅ Π±ΡΠ»Π° Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π° Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π΄Π»Ρ 0 ΠΈ 1. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²ΡΠΌ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ΠΌΠΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² ΡΠ΅Π»ΠΎΡΠΈΡΠ»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΎΠ½ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΡΠ΅ΡΡΡ Π² ΡΠΈΠΏ unsigned long long ΠΈ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π±ΠΈΡΠΎΠ²Π°Ρ ΡΡ Π΅ΠΌΠ°. ΠΠΈΡΡ Π² Π½Π°Π±ΠΎΡΠ΅ Π±ΠΈΡΠΎΠ² ΡΠ²Π»ΡΡΡΡΡ ΠΊΠΎΠΏΠΈΠ΅ΠΉ ΡΡΠΎΠΉ ΡΡ Π΅ΠΌΡ. ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² ΠΏΡΠ΅Π²ΠΎΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡΠΎΠ² Π² ΡΠΈΠΏΠ΅ unsigned long long, ΡΠΎ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΠ°ΡΡΠΈΠ΅ Π±ΠΈΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² Π½ΡΠ»Ρ. ΠΡΠ»ΠΈ ΡΠ°Π·ΠΌΠ΅Ρ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² ΠΌΠ΅Π½ΡΡΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²Π° Π±ΠΈΡΠΎΠ², ΡΠΎ Π±ΡΠ΄ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΌΠ»Π°Π΄ΡΠΈΠ΅ Π±ΠΈΡΡ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»Π΅Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π° ΡΡΠ°ΡΡΠΈΠ΅ Π±ΠΈΡΡ Π²Π½Π΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΠ±ΡΠ΅ΠΊΡΠ° Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ:
// bitvec1 ΠΌΠ΅Π½ΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°; ΡΡΠ°ΡΡΠΈΠ΅ Π±ΠΈΡΡ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°
// ΠΎΡΠ±ΡΠ°ΡΡΠ²Π°ΡΡΡΡ
bitset<13> bitvec1(0xbeef); // Π±ΠΈΡΡ 1111011101111
// bitvec2 Π±ΠΎΠ»ΡΡΠ΅ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡΠ°; ΡΡΠ°ΡΡΠΈΠ΅ Π±ΠΈΡΡ bitvec2
// ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² Π½ΡΠ»Ρ
bitset<20> bitvec2(0xbeef); // Π±ΠΈΡΡ 00001011111011101111
// Π½Π° ΠΌΠ°ΡΠΈΠ½Π°Ρ Ρ 64-Π±ΠΈΡΠΎΠ²ΡΠΌ long long, 0ULL - ΡΡΠΎ 64 Π±ΠΈΡΠ° ΠΈΠ· 0,
// a ~0ULL - 64 Π΅Π΄ΠΈΠ½ΠΈΡΡ
bitset<128> bitvec3(~0ULL); // Π±ΠΈΡΡ 0...63 - Π΅Π΄ΠΈΠ½ΠΈΡΡ; 63...121 - Π½ΡΠ»ΠΈ
ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² ΠΈΠ· ΡΡΡΠΎΠΊΠΈΠΠ°Π±ΠΎΡ Π±ΠΈΡΠΎΠ² ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΠΈΠ»ΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ»Π΅ΠΌΠ΅Π½Ρ Π² ΡΠΈΠΌΠ²ΠΎΠ»ΡΠ½ΠΎΠΌ ΠΌΠ°ΡΡΠΈΠ²Π΅. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π½Π΅ΠΏΠΎΡΡΠ΅Π΄ΡΡΠ²Π΅Π½Π½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡ Π±ΠΈΡΠΎΠ²ΡΡ ΡΡ Π΅ΠΌΡ. ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠΎΠΊΠΈ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΠΈΡΠ»Π° ΡΠΈΠΌΠ²ΠΎΠ»Ρ Ρ ΡΠ°ΠΌΡΠΌΠΈ Π½ΠΈΠ·ΠΊΠΈΠΌΠΈ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΠΌΠΈ Π² ΡΡΡΠΎΠΊΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ ΡΡΠ°ΡΡΠΈΠΌ Π±ΠΈΡΠ°ΠΌ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡΠΎΡ:
bitset<32> bitvec4("1100"); // Π±ΠΈΡΡ 2 ΠΈ 3 - Π΅Π΄ΠΈΠ½ΠΈΡΡ, ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ - 0
ΠΡΠ»ΠΈ ΡΡΡΠΎΠΊΠ° ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΡΠ΅ΠΌ Π±ΠΈΡΠΎΠ² Π² Π½Π°Π±ΠΎΡΠ΅, ΡΡΠ°ΡΡΠΈΠ΅ Π±ΠΈΡΡ ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°ΡΡΡΡ Π² Π½ΡΠ»Ρ.
Π‘ΠΎΠ³Π»Π°ΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΈΠ½Π΄Π΅ΠΊΡΠ°ΡΠΈΠΈ ΡΡΡΠΎΠΊ ΠΈ Π½Π°Π±ΠΎΡΠΎΠ² Π±ΠΈΡΠΎΠ² ΠΏΡΡΠΌΠΎ ΠΏΡΠΎΡΠΈΠ²ΠΎΠΏΠΎΠ»ΠΎΠΆΠ½Ρ: ΡΠΈΠΌΠ²ΠΎΠ» ΡΡΡΠΎΠΊΠΈ Ρ ΡΠ°ΠΌΡΠΌ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ (ΠΊΡΠ°ΠΉΠ½ΠΈΠΉ ΠΏΡΠ°Π²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ») ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π΄Π»Ρ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ»Π°Π΄ΡΠ΅Π³ΠΎ Π±ΠΈΡΠ° Π² Π½Π°Π±ΠΎΡΠ΅ Π±ΠΈΡΠΎΠ² (Π±ΠΈΡ Ρ ΠΈΠ½Π΄Π΅ΠΊΡΠΎΠΌ 0). ΠΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² ΠΈΠ· ΡΡΡΠΎΠΊΠΈ ΡΠ»Π΅Π΄ΡΠ΅Ρ ΠΏΠΎΠΌΠ½ΠΈΡΡ ΠΎΠ± ΡΡΠΎΠΌ ΡΠ°Π·Π»ΠΈΡΠΈΠΈ.
ΠΠ΅ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π²ΡΡ ΡΡΡΠΎΠΊΡ Π² ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡ Π΄Π»Ρ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ², Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΡΠ°ΡΡΡ ΡΡΡΠΎΠΊΠΈ:
string str("1111111000000011001101");
bitset<32> bitvec5(str, 5, 4); // ΡΠ΅ΡΡΡΠ΅ Π±ΠΈΡΠ°, Π½Π°ΡΠΈΠ½Π°Ρ Ρ str[5] - 1100
bitset<32> bitvec6(str, str.size()-4); // ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ΅ΡΡΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΡ
// ΡΠΈΠΌΠ²ΠΎΠ»Π°
ΠΠ΄Π΅ΡΡ Π½Π°Π±ΠΎΡ Π±ΠΈΡΠΎΠ² bitvec5 ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΎΠΉ str, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠΈΠΌΠ²ΠΎΠ»Π° str[5], ΠΈ ΡΠ΅ΡΡΡΡΠΌΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ Π΄Π°Π»Π΅Π΅. ΠΠ°ΠΊ ΠΎΠ±ΡΡΠ½ΠΎ, ΠΊΡΠ°ΠΉΠ½ΠΈΠΉ ΡΠΏΡΠ°Π²Π° ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΠ΅Ρ Π±ΠΈΡ ΡΠ°ΠΌΠΎΠ³ΠΎ Π½ΠΈΠ·ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΄ΠΊΠ°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±ΡΠ°Π·ΠΎΠΌ, Π½Π°Π±ΠΎΡ bitvec5 ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π±ΠΈΡΠ°ΠΌΠΈ Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΈ 3 Π΄ΠΎ 0 ΠΈ ΠΏΠΎΠ»ΡΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ 1100, Π° ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ Π±ΠΈΡΡ β 0. ΠΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΎΡ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ² bitvec6 ΠΏΠ΅ΡΠ΅Π΄Π°Π΅Ρ ΡΡΡΠΎΠΊΡ ΠΈ ΠΎΡΠΏΡΠ°Π²Π½ΡΡ ΡΠΎΡΠΊΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΡΡΡΠΎΠΊΠΈ str, Π½Π°ΡΠΈΠ½Π°Ρ Ρ ΡΠ΅ΡΠ²Π΅ΡΡΠΎΠ³ΠΎ ΠΈ Π΄ΠΎ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ str. ΠΡΡΠ°ΡΠΎΠΊ Π±ΠΈΡΠΎΠ² Π½Π°Π±ΠΎΡΠ° bitvec6 ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·ΠΈΡΡΠ΅ΡΡΡ Π½ΡΠ»ΡΠΌΠΈ. ΠΡΠΈ ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈΡΡ ΡΠ°ΠΊ:
Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΡ ΡΠ°Π·Π΄Π΅Π»Π° 17.2.1Π£ΠΏΡΠ°ΠΆΠ½Π΅Π½ΠΈΠ΅ 17.9. ΠΠ±ΡΡΡΠ½ΠΈΡΠ΅ Π±ΠΈΡΠΎΠ²ΡΡ ΡΡ Π΅ΠΌΡ, ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΊΡΠΎΠ² bitset:
(a) bitset<64> bitvec(32);
(b) bitset<32> bv(1010101);
(c) string bstr; cin >> bstr; bitset<8> bv(bstr);
17.2.2. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π±ΠΈΡΠΎΠ²
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π±ΠΈΡΠΎΠ² (ΡΠ°Π±Π». 17.3) ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΡΡ ΡΠ°Π·Π»ΠΈΡΠ½ΡΠ΅ ΡΠΏΠΎΡΠΎΠ±Ρ ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ ΠΈ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ»ΠΈ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ Π±ΠΈΡΠΎΠ². ΠΠ»Π°ΡΡ bitset ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΎΠ±ΠΈΡΠΎΠ²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π»ΠΈΡΡ Π² ΡΠ°Π·Π΄Π΅Π»Π΅ 4.8. ΠΡΠΈΠΌΠ΅Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΊ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ bitset ΡΡΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ ΠΈΠΌΠ΅ΡΡ ΡΠΎΡ ΠΆΠ΅ ΡΠΌΡΡΠ», ΡΡΠΎ ΠΈ ΡΠ°ΠΊΠΎΠ²ΡΠ΅ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΎΡΡ Π΄Π»Ρ ΡΠΈΠΏΠ° unsigned.
Π’Π°Π±Π»ΠΈΡΠ° 17.3. ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ Ρ Π½Π°Π±ΠΎΡΠ°ΠΌΠΈ Π±ΠΈΡΠΎΠ²
b.any() Π£ΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ Π»ΠΈ Π² Π½Π°Π±ΠΎΡΠ΅ b Ρ ΠΎΡΡ ΠΊΠ°ΠΊΠΎΠΉ-Π½ΠΈΠ±ΡΠ΄Ρ Π±ΠΈΡ? b.all() ΠΡΠ΅ Π»ΠΈ Π±ΠΈΡΡ Π½Π°Π±ΠΎΡΠ° b ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ? b.none() ΠΠ΅Ρ Π»ΠΈ Π² Π½Π°Π±ΠΎΡΠ΅ b ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π±ΠΈΡΠΎΠ²? b.count() ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π½ΡΡ Π±ΠΈΡΠΎΠ² Π² Π½Π°Π±ΠΎΡΠ΅ b b.size() Π€ΡΠ½ΠΊΡΠΈΡ constexpr (ΡΠΌ. ΡΠ°Π·Π΄Π΅Π» 2.4.4), Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡΠ°Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π±ΠΈΡΠΎΠ² Π½Π°Π±ΠΎΡΠ° b b.test(pos) ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π΅ΡΠ»ΠΈ Π±ΠΈΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ pos ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΠΈ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ b.set(pos, v) b.set() Π£ΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π΄Π»Ρ Π±ΠΈΡΠ° Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ pos Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ v. ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ v ΠΈΠΌΠ΅Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true. ΠΠ΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ Π±ΠΈΡΡ Π½Π°Π±ΠΎΡΠ° b b.reset(pos) b.reset() Π‘Π±ΡΠ°ΡΡΠ²Π°Π΅Ρ Π±ΠΈΡ Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ pos ΠΈΠ»ΠΈ Π²ΡΠ΅ Π±ΠΈΡΡ Π½Π°Π±ΠΎΡΠ° b b.flip(pos) b.flip() ΠΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π±ΠΈΡΠ° Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ pos ΠΈΠ»ΠΈ Π²ΡΠ΅ Π±ΠΈΡΡ Π½Π°Π±ΠΎΡΠ° b b[pos] ΠΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΠΈΡΡ Π½Π°Π±ΠΎΡΠ° b Π² ΠΏΠΎΠ·ΠΈΡΠΈΠΈ pos; Π΅ΡΠ»ΠΈ Π½Π°Π±ΠΎΡ b ΠΊΠΎΠ½ΡΡΠ°Π½ΡΠ΅Π½ ΠΈ Π±ΠΈΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½, ΡΠΎ b[pos] Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π»ΠΎΠ³ΠΈΡΠ΅ΡΠΊΠΎΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ true, Π° Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ β Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ false b.to_ulong() b.to_ullong() ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π·Π½Π°ΡΠ΅Π½ΠΈΠ΅ ΡΠΈΠΏΠ° unsigned long ΠΈΠ»ΠΈ ΡΠΈΠΏΠ° unsigned long long Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π±ΠΈΡΠ°ΠΌΠΈ, ΡΡΠΎ ΠΈ Π² Π½Π°Π±ΠΎΡΠ΅ b. ΠΡΠ»ΠΈ Π±ΠΈΡΠΎΠ²Π°Ρ ΡΡ Π΅ΠΌΠ° Π² Π½Π°Π±ΠΎΡΠ΅ b Π½Π΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΠ΅Ρ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΌΡ ΡΠΈΠΏΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ°, ΠΏΠ΅ΡΠ΅Π΄Π°Π΅ΡΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ overflow_error b.to_string(zero, one) ΠΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ ΡΡΡΠΎΠΊΡ, ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡΡΡΡ Π±ΠΈΡΠΎΠ²ΡΡ ΡΡ Π΅ΠΌΡ Π½Π°Π±ΠΎΡΠ° b. ΠΠ°ΡΠ°ΠΌΠ΅ΡΡΡ zero ΠΈ one ΠΈΠΌΠ΅ΡΡ ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ '0' ΠΈ '1'. ΠΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΡΡΠ°Π²Π»Π΅Π½ΠΈΡ Π±ΠΈΡΠΎΠ² 0 ΠΈ 1 Π² Π½Π°Π±ΠΎΡΠ΅ b os << b ΠΡΠ²ΠΎΠ΄ΠΈΡ Π² ΠΏΠΎΡΠΎΠΊ os Π±ΠΈΡΡ Π½Π°Π±ΠΎΡΠ° b ΠΊΠ°ΠΊ ΡΠΈΠΌΠ²ΠΎΠ»Ρ '0' ΠΈ '1' is >> b Π§ΠΈΡΠ°Π΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈΠ· ΠΏΠΎΡΠΎΠΊΠ° is Π² Π½Π°Π±ΠΎΡ b. Π§ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠ΅ΠΊΡΠ°ΡΠ°Π΅ΡΡΡ, ΠΊΠΎΠ³Π΄Π° ΡΠ»Π΅Π΄ΡΡΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΎΡΠ»ΠΈΡΠ°Π΅ΡΡΡ ΠΎΡ 1 ΠΈΠ»ΠΈ 0 Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ³Π΄Π° ΠΏΡΠΎΡΠΈΡΠ°Π½ΠΎ b.size() Π±ΠΈΡΠΎΠ²ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ· ΡΡΠ½ΠΊΡΠΈΠΉ, count(), size(), all(), any() ΠΈ none(), Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°ΡΡ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΈ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°ΡΡ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ Π²ΡΠ΅Π³ΠΎ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ². ΠΡΡΠ³ΠΈΠ΅, set(), reset() ΠΈ flip(), ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅ Π½Π°Π±ΠΎΡΠ° Π±ΠΈΡΠΎΠ². Π€ΡΠ½ΠΊΡΠΈΠΈ-ΡΠ»Π΅Π½Ρ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΠΈΠ΅ Π½Π°Π±ΠΎΡ Π±ΠΈΡΠΎΠ², Π΄ΠΎΠΏΡΡΠΊΠ°ΡΡ ΠΏΠ΅ΡΠ΅Π³ΡΡΠ·ΠΊΡ. Π Π»ΡΠ±ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π²Π΅ΡΡΠΈΡ ΡΡΠ½ΠΊΡΠΈΠΈ Π±Π΅Π· Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠΎΠ² ΠΏΡΠΈΠΌΠ΅Π½ΡΠ΅Ρ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΊΠΎ Π²ΡΠ΅ΠΌΡ Π½Π°Π±ΠΎΡΡ, Π° Π²Π΅ΡΡΠΈΠΈ ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΏΠΎΠ»ΡΡΠ°ΡΡΠΈΡ ΠΏΠΎΠ·ΠΈΡΠΈΡ, ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΊ Π·Π°Π΄Π°Π½Π½ΠΎΠΌΡ Π±ΠΈΡΡ: