Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«Π―Π·Ρ‹ΠΊ программирования C++. ΠŸΡΡ‚ΠΎΠ΅ ΠΈΠ·Π΄Π°Π½ΠΈΠ΅Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 34

Автор Π‘Ρ‚Π΅Π½Π»ΠΈ Π›ΠΈΠΏΠΏΠΌΠ°Π½

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ индСксирования для Π²Ρ‹Π²ΠΎΠ΄Π° ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа строки:

if (!s.empty())        // ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΠ²ΡˆΠΈΡΡŒ, Ρ‡Ρ‚ΠΎ символ для Π²Ρ‹Π²ΠΎΠ΄Π° Π΅ΡΡ‚ΡŒ,

 cout << s[0] << endl; // вывСсти ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ строки s

ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ символу, удостовСримся, Ρ‡Ρ‚ΠΎ строка s Π½Π΅ пуста. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ использовании индСксирования слСдуСт ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Π½Π°Π»ΠΈΡ‡ΠΈΠ΅ значСния Π² Π΄Π°Π½Π½ΠΎΠΉ области. Если строка s пуста, Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ s[0] Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎ.

Если строка Π½Π΅ константа (см. Ρ€Π°Π·Π΄Π΅Π» 2.4), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠΌΡƒ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ индСксирования символу ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅. НапримСр, ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ символ ΠΌΠΎΠΆΠ½ΠΎ пСрСвСсти Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ:

string s("some string");

if (!s.empty())        // ΡƒΠ΄ΠΎΡΡ‚ΠΎΠ²Π΅Ρ€ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Π»ΠΈΡ‡ΠΈΠΈ символа s[0]

 s[0] = toupper(s[0]); // ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ Π½ΠΎΠ²ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π²ΠΎΠΌΡƒ символу

Π’Ρ‹Π²ΠΎΠ΄ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½ Π½ΠΈΠΆΠ΅.

Some string

ИспользованиС индСксирования для ΠΏΠ΅Ρ€Π΅Π±ΠΎΡ€Π°

Π’ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ ΠΏΠ΅Ρ€Π΅Π²Π΅Π΄Π΅ΠΌ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр ΠΏΠ΅Ρ€Π²ΠΎΠ΅ слово строки s:

// ΠΎΠ±Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ символы строки s, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ Π½Π΅ ΠΈΡΡ‡Π΅Ρ€ΠΏΠ°ΡŽΡ‚ΡΡ ΠΈΠ»ΠΈ

// Π½Π΅ встрСтится ΠΏΡ€ΠΎΠ±Π΅Π»

for (decltype(s.size()) index = 0;

 index != s.size() && !isspace(s[index]); ++index)

 s[index] = toupper(s[index]); // ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚ΡŒ Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр

Π’Ρ‹Π²ΠΎΠ΄ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‚Π°ΠΊΠΎΠ²:

SOME string

Π¦ΠΈΠΊΠ» for (см. Ρ€Π°Π·Π΄Π΅Π» 1.4.2) ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ index для индСксирования строки s. Для присвоСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ index ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ спСцификатор decltype. ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ index ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0, Ρ‡Ρ‚ΠΎΠ±Ρ‹ пСрвая итСрация Π½Π°Ρ‡Π°Π»Π°ΡΡŒ с ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ символа строки s. На ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ index увСличиваСтся, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ символ строки s. Π’ Ρ‚Π΅Π»Π΅ Ρ†ΠΈΠΊΠ»Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΠΉ символ пСрСводится Π² Π²Π΅Ρ€Ρ…Π½ΠΈΠΉ рСгистр.

Π’ условии Ρ†ΠΈΠΊΠ»Π° for ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ новая Ρ‡Π°ΡΡ‚ΡŒ β€” ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ логичСского AND (ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ &&). Π­Ρ‚ΠΎΡ‚ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли ΠΎΠ±Π° ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° истинны, ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС. Π’Π°ΠΆΠ½ΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ этот ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ своСго ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли Π»Π΅Π²Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ истинСн. Π’ Π΄Π°Π½Π½ΠΎΠΌ случаС это Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ индСксирования строки s Π½Π΅ Π±ΡƒΠ΄Π΅Ρ‚, Ссли пСрСмСнная index находится Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ρ‡Π°ΡΡ‚ΡŒ s[index] выполняСтся, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ссли пСрСмСнная index Π½Π΅ Ρ€Π°Π²Π½Π° s.size(). ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΠ½ΠΊΡ€Π΅ΠΌΠ΅Π½Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ index Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡ€Π΅Π²Π·ΠΎΠΉΠ΄Π΅Ρ‚ значСния s.size(), пСрСмСнная index всСгда Π±ΡƒΠ΄Π΅Ρ‚ мСньшС s.size().

Π’Π½ΠΈΠΌΠ°Π½ΠΈΠ΅! Π˜Π½Π΄Π΅ΠΊΡΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½Π΅ контролируСтся

ΠŸΡ€ΠΈ использовании индСксирования слСдуСт самому ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ индСкс оставался Π² допустимом Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅. ИндСкс Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ >= 0 ΠΈ < size() строки. Для упрощСния ΠΊΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰Π΅Π³ΠΎ индСксированиС, Π² качСствС индСкса всСгда слСдуСт ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ‚ΠΈΠΏΠ° string::size_type. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ это Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ, индСкс Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ мСньшС нуля. ΠŸΡ€ΠΈ использовании значСния Ρ‚ΠΈΠΏΠ° size_type Π² качСствС индСкса достаточно ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса мСньшС значСния, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ size().

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Π½Π΅ обязана ΠΏΡ€ΠΎΠ²Π΅Ρ€ΡΡ‚ΡŒ ΠΈ Π½Π΅ провСряСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ индСкса. Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ использования индСкса Π²Π½Π΅ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° нСпрСдсказуСм.

ИспользованиС индСксирования для ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠ³ΠΎ доступа

Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ прСобразования рСгистра символов ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ индСкс пСрСмСщался Π½Π° ΠΎΠ΄Π½Ρƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π·Π° Ρ€Π°Π·. Но ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚ΡŒ индСкс ΠΈ нСпосрСдствСнно ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒΡΡ ΠΊ Π²Ρ‹Π±Ρ€Π°Π½Π½ΠΎΠΌΡƒ символу. НСт Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСобходимости ΠΏΠΎΠ»ΡƒΡ‡Π°Ρ‚ΡŒ доступ ΠΊ символам ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ.

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ имССтся число ΠΎΡ‚ 0 Π΄ΠΎ 15, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π² ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΠΎΠΌ Π²ΠΈΠ΄Π΅. Для этого ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ строку, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΡƒΡŽ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚ΡŒΡŽ ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌΠΈ Ρ†ΠΈΡ„Ρ€Π°ΠΌΠΈ.

const string hexdigits = "0123456789ABCDEF"; // Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅

                                             // ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹

cout << "Enter a series of numbers between 0 and 15"

     << " separated by spaces. Hit ENTER when finished: "

     << endl;

string result;       // Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚ΠΈΡ€ΡƒΡŽΡ‰ΡƒΡŽ

                     // ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΡƒΡŽ строку

string::size_type n; // содСрТит Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ число

while (cin >> n)

 if (n < hexdigits.size()) // ΠΈΠ³Π½ΠΎΡ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ нСдопустимый Π²Π²ΠΎΠ΄

  result += hexdigits[n];  // Π²Ρ‹Π±Ρ€Π°Ρ‚ΡŒ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ

                           // ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½ΡƒΡŽ Ρ†ΠΈΡ„Ρ€Ρƒ

cout << "Your hex number is: " << result << endl;

Если ввСсти ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ числа:

12 0 5 15 8 15

Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Π°ΠΊΠΈΠΌ:

Your hex number is: C05F8F

ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° начинаСтся с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ строки hexdigits, содСрТащСй ΡˆΠ΅ΡΡ‚Π½Π°Π΄Ρ†Π°Ρ‚Π΅Ρ€ΠΈΡ‡Π½Ρ‹Π΅ Ρ†ΠΈΡ„Ρ€Ρ‹ ΠΎΡ‚ 0 Π΄ΠΎ F. Π‘Π΄Π΅Π»Π°Π΅ΠΌ эту строку константной (см. Ρ€Π°Π·Π΄Π΅Π» 2.4), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ содСрТащиСся Π² Π½Π΅ΠΉ значСния Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒΡΡ. Для индСксирования строки hexdigits ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Π² Ρ†ΠΈΠΊΠ»Π΅ Π²Π²Π΅Π΄Π΅Π½Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ n. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ hexdigits[n] являСтся символ, располоТСнный Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ n строки hexdigits. НапримСр, Ссли n Ρ€Π°Π²Π½ΠΎ 15, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” F; Ссли 12, Ρ‚ΠΎ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ β€” Π‘ ΠΈ Ρ‚.Π΄. ΠŸΠΎΠ»ΡƒΡ‡Π΅Π½Π½Π°Ρ Ρ†ΠΈΡ„Ρ€Π° добавляСтся ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ result, которая ΠΈ выводится, ΠΊΠΎΠ³Π΄Π° вСсь Π²Π²ΠΎΠ΄ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½.

Всякий Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ индСксированиС, слСдуСт ΠΏΠΎΠ·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ индСкс оставался Π² Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π΅. Π’ этой ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅ индСкс, n, ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΈΠΏ string::size_type, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ, ΠΊΠ°ΠΊ извСстно, являСтся Π±Π΅Π·Π·Π½Π°ΠΊΠΎΠ²Ρ‹ΠΌ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ n Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ большС ΠΈΠ»ΠΈ Ρ€Π°Π²Π½ΠΎ 0. ΠŸΡ€Π΅ΠΆΠ΄Π΅ Ρ‡Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ n для индСксирования строки hexdigits, удостовСримся, Ρ‡Ρ‚ΠΎ Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ мСньшС, Ρ‡Π΅ΠΌ hexdigits.size().

УпраТнСния Ρ€Π°Π·Π΄Π΅Π»Π° 3.2.3

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.6. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for для Π·Π°ΠΌΠ΅Π½Ρ‹ всСх символов строки Π½Π° X.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.7. Π§Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚, Ссли ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ Ρ†ΠΈΠΊΠ»Π° Π² ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰Π΅ΠΌ ΡƒΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠΈ ΠΊΠ°ΠΊ ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ char? ΠŸΡ€Π΅Π΄ΡΠΊΠ°ΠΆΠΈΡ‚Π΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ использовался Ρ‚ΠΈΠΏ char, ΠΈ ΡƒΠ±Π΅Π΄ΠΈΡ‚Π΅ΡΡŒ Π² своСй ΠΏΡ€Π°Π²ΠΎΡ‚Π΅.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.8. ΠŸΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ упраТнСния, сначала ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ while, Π° Π·Π°Ρ‚Π΅ΠΌ Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½Ρ‹ΠΉ Ρ†ΠΈΠΊΠ» for. Какой ΠΈΠ· этих Ρ‚Ρ€Π΅Ρ… ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΎΠ² Π²Ρ‹ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Ρ‚Π΅Ρ‚Π΅ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.9. Π§Ρ‚ΠΎ Π΄Π΅Π»Π°Π΅Ρ‚ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π°Ρ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°? Π”Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ Π»ΠΈ ΠΎΠ½Π° ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Π°? Если Π½Π΅Ρ‚, Ρ‚ΠΎ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?

string s;

cout << s[0] << endl;

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.10. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, которая Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ строку символов, Π²ΠΊΠ»ΡŽΡ‡Π°ΡŽΡ‰ΡƒΡŽ Π·Π½Π°ΠΊΠΈ ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ, ΠΈ Π²Ρ‹Π²Π΅Π΄ΠΈΡ‚Π΅ Π΅Π΅, Π½ΠΎ ΡƒΠΆΠ΅ Π±Π΅Π· Π·Π½Π°ΠΊΠΎΠ² ΠΏΡƒΠ½ΠΊΡ‚ΡƒΠ°Ρ†ΠΈΠΈ.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.11. Допустим Π»ΠΈ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for? Если Π΄Π°, Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠ² Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ с?

const string s = "Keep out!";

for (auto &c : s) {/*...*/}

3.3. Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ vector

Π’Π΅ΠΊΡ‚ΠΎΡ€ (vector) β€” это коллСкция ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡƒ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… присвоСн цСлочислСнный индСкс, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ доступ ΠΊ этому ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρƒ. Π’Π΅ΠΊΡ‚ΠΎΡ€ β€” это ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ (container), ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΎΠ½ "содСрТит" Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°Ρ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² части II.

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ. Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… подразумСваСтся Ρ‚Π°ΠΊΠΆΠ΅, Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ объявлСниС using.

#include <vector>

using std::vector;

Π’ΠΈΠΏ vector β€” это шаблон класса (class template). Π―Π·Ρ‹ΠΊ Π‘++ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹ ΠΈ классов, ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. НаписаниС шаблона Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ довольно Π³Π»ΡƒΠ±ΠΎΠΊΠΎΠ³ΠΎ понимания языка Π‘++. Π”ΠΎ Π³Π»Π°Π²Ρ‹ 16 ΠΌΡ‹ Π΄Π°ΠΆΠ΅ Π½Π΅ Π±ΡƒΠ΄Π΅ΠΌ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°Ρ‚ΡŒ созданиС собствСнных шаблонов! К ΡΡ‡Π°ΡΡ‚ΡŒΡŽ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡˆΠ°Π±Π»ΠΎΠ½Ρ‹, вовсС Π½Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΠΌΠ΅Ρ‚ΡŒ ΠΈΡ… ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ.

Π¨Π°Π±Π»ΠΎΠ½Ρ‹ сами ΠΏΠΎ сСбС Π½Π΅ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π½ΠΈ функциями, Π½ΠΈ классами. Π˜Ρ… ΠΌΠΎΠΆΠ½ΠΎ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ инструкциСй для компилятора ΠΏΠΎ созданию классов ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ. ΠŸΡ€ΠΎΡ†Π΅ΡΡ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ компилятором для создания классов ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ, называСтся созданиСм экзСмпляра (instantiation) шаблона. ΠŸΡ€ΠΈ использовании шаблона Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ, экзСмпляр ΠΊΠ°ΠΊΠΎΠ³ΠΎ класса ΠΈΠ»ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ компилятор.

Для создания экзСмпляра шаблона класса слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡŽ, Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ зависит ΠΎΡ‚ шаблона. Π­Ρ‚Π° информация всСгда задаСтся ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎ: Π² ΡƒΠ³Π»ΠΎΠ²Ρ‹Ρ… скобках послС ΠΈΠΌΠ΅Π½ΠΈ шаблона.