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

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

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

for (int i = 0; /* Π½Π΅Ρ‚ условия */ ; ++i) {

 // ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° i; ΠΊΠΎΠ΄ Π² Ρ†ΠΈΠΊΠ»Π΅ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΎΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ!

}

Π’ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠ΅ for ΠΌΠΎΠΆΠ΅Ρ‚ Ρ‚Π°ΠΊΠΆΠ΅ ΠΎΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅. Π’ Ρ‚Π°ΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»Π°Ρ… Π»ΠΈΠ±ΠΎ условиС, Π»ΠΈΠ±ΠΎ Ρ‚Π΅Π»ΠΎ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰Π΅Π΅ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΡŽ. Π’ качСствС ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π° ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠ΅ΠΌ Ρ†ΠΈΠΊΠ» while, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΠΈΠΉ Π²Π²ΠΎΠ΄ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ†Π΅Π»Ρ‹Ρ… чисСл.

vector<int> v;

for (int i; cin >> i; /* Π½Π΅Ρ‚ выраТСния */ )

 v.push_back(i);

Π’ этом Ρ†ΠΈΠΊΠ»Π΅ Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ нСобходимости Π² Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠΈ, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ условиС измСняСт Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ i. УсловиС провСряСт Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, поэтому Ρ†ΠΈΠΊΠ» заканчиваСтся, ΠΊΠΎΠ³Π΄Π° ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½ вСсь Π²Π²ΠΎΠ΄ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΈΠ·ΠΎΡˆΠ»Π° ошибка Π²Π²ΠΎΠ΄Π°.

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.15. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ². Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ всС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ошибки.

(a) for (int ix = 0; ix != sz; ++ix) { /* ... */ }

    if (ix != sz)

     // ...

(b) int ix;

    for (ix != sz; ++ix) { /* ... */ }

(c) for (int ix = 0; ix != sz; ++ix, ++sz) { /* ... */ }

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.16. Π¦ΠΈΠΊΠ» while особСнно Ρ…ΠΎΡ€ΠΎΡˆ, ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ Π½Π΅ΠΊΠΎΠ΅ условиС; Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° Π½ΡƒΠΆΠ½ΠΎ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ значСния Π΄ΠΎ ΠΊΠΎΠ½Ρ†Π° Ρ„Π°ΠΉΠ»Π°. Π¦ΠΈΠΊΠ» for ΡΡ‡ΠΈΡ‚Π°ΡŽΡ‚ Ρ†ΠΈΠΊΠ»ΠΎΠΌ пошагового выполнСния: индСкс ΠΏΡ€ΠΎΡ…ΠΎΠ΄ΠΈΡ‚ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² ΠΊΠΎΠ»Π»Π΅ΠΊΡ†ΠΈΠΈ. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ идиоматичСскоС использованиС ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π°, Π° Π·Π°Ρ‚Π΅ΠΌ ΠΏΠ΅Ρ€Π΅ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ случаи использования Π² Π΄Ρ€ΡƒΠ³ΠΎΠΉ конструкции Ρ†ΠΈΠΊΠ»Π°. Если Π±Ρ‹ Π²Ρ‹ ΠΌΠΎΠ³Π»ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ Ρ†ΠΈΠΊΠ», Ρ‚ΠΎ ΠΊΠ°ΠΊΠΎΠΉ Π±Ρ‹ Π²Ρ‹ Π²Ρ‹Π±Ρ€Π°Π»ΠΈ ΠΈ ΠΏΠΎΡ‡Π΅ΠΌΡƒ?

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.17. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π΅ΡΡ‚ΡŒ Π΄Π²Π° Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Ρ†Π΅Π»Ρ‹Ρ… чисСл. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΡƒΡŽ, Π½Π΅ являСтся Π»ΠΈ ΠΎΠ΄ΠΈΠ½ Π²Π΅ΠΊΡ‚ΠΎΡ€ прСфиксом Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ. Для Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π½Π΅Ρ€Π°Π²Π½ΠΎΠΉ Π΄Π»ΠΈΠ½Ρ‹ сравнивайтС количСство элСмСнтов мСньшСго Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. НапримСр, Ссли Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ содСрТат значСния 0, 1, 1, 2 ΠΈ 0, 1, 1, 2, 3, 5, 8 соотвСтствСнно, ваша ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π΄ΠΎΠ»ΠΆΠ½Π° Π²ΠΎΠ·Π²Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ true.

5.4.3. Π‘Π΅Ρ€ΠΈΠΉΠ½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for

Новый стандарт Π²Π²Π΅Π» ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½Π½Ρ‹ΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅Ρ‚ элСмСнты ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Бинтаксис сСрийного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for (range for) Ρ‚Π°ΠΊΠΎΠ²:

for (объявлСниС : Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅)

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

Π²Ρ‹Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π½Π΅ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ, Ρ‚Π°ΠΊΡƒΡŽ, ΠΊΠ°ΠΊ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (см. Ρ€Π°Π·Π΄Π΅Π» 3.3.1), массив (см. Ρ€Π°Π·Π΄Π΅Π» 3.5), ΠΈΠ»ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°, ΠΊΠ°ΠΊ vector ΠΈΠ»ΠΈ string, Ρƒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π΅ΡΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Ρ‹ begin() ΠΈ end(), Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‰ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ (см. Ρ€Π°Π·Π΄Π΅Π» 3.4).

объявлСниС опрСдСляСт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π΄ΠΎΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ (см. Ρ€Π°Π·Π΄Π΅Π» 4.11). ΠŸΡ€ΠΎΡ‰Π΅ всСго Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ соотвСтствиС Ρ‚ΠΈΠΏΠΎΠ² Π·Π° счСт использования спСцификатора Ρ‚ΠΈΠΏΠ° auto (см. Ρ€Π°Π·Π΄Π΅Π» 2.5.2). Π’Π°ΠΊ компилятор Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Ρ‚ΠΈΠΏ сам. Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° запись Π² элСмСнты ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, Ρ‚ΠΎ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° Π΄ΠΎΠ»ΠΆΠ½Π° ΠΈΠΌΠ΅Ρ‚ΡŒ ссылочный Ρ‚ΠΈΠΏ.

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

НСсколько Ρ‚Π°ΠΊΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ² ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ прСдставлСно, Π½ΠΎ для Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½Π½ΠΎΡΡ‚ΠΈ рассмотрим Ρ†ΠΈΠΊΠ», ΡƒΠ΄Π²Π°ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅:

vector<int> v = {0,1,2,3,4,5,6,7,8,9};

// для записи Π² элСмСнты пСрСмСнная Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ссылкой

for (auto &r : v) // для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v

 r *= 2;          // ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v

Π—Π°Π³ΠΎΠ»ΠΎΠ²ΠΎΠΊ for ΠΎΠ±ΡŠΡΠ²Π»ΡΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰Π°Ρ пСрСмСнная Ρ†ΠΈΠΊΠ»Π° r связана с Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠΌ v. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ компилятору ΡΠ°ΠΌΠΎΡΡ‚ΠΎΡΡ‚Π΅Π»ΡŒΠ½ΠΎ вывСсти Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ r, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ спСцификатор auto. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ прСдполагаСтся ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v, объявим ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ r ΠΊΠ°ΠΊ ссылку. ΠŸΡ€ΠΈ присвоСнии Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ Π² Ρ†ΠΈΠΊΠ»Π΅ фактичСски присваиваСтся Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнту, с ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΌ связана пСрСмСнная r Π² Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Π’ΠΎΡ‚ эквивалСнтноС ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ сСрийного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Ρ… Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ Ρ†ΠΈΠΊΠ»Π° for:

for (auto beg = v.begin(), end = v.end(); beg != end; ++beg) {

 auto &r = *beg; // для измСнСния элСмСнтов r Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ ссылкой

 r *= 2;         // ΡƒΠ΄Π²ΠΎΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v

}

Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΊΠΎΠ³Π΄Π° извСстно, ΠΊΠ°ΠΊ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 3.3.2 ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ ΠΎ нСвозмоТности Π΅Π³ΠΎ использования для добавлСния элСмСнтов ΠΊ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρƒ ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠΌΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ. Π’ сСрийном ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ for ΠΊΠ΅ΡˆΠΈΡ€ΡƒΠ΅Ρ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ end(). Если Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΈΠ»ΠΈ ΡƒΠ΄Π°Π»ΠΈΡ‚ΡŒ элСмСнты ΠΈΠ· ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, сохранСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ end() станСт Π½Π΅Π²Π΅Ρ€Π½Ρ‹ΠΌ (см. Ρ€Π°Π·Π΄Π΅Π» 3.4.1). Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΏΠΎ этой Ρ‚Π΅ΠΌΠ΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 9.3.6.

5.4.4. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ do while

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ do while ΠΏΠΎΡ…ΠΎΠΆ Π½Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ while, Π½ΠΎ Π΅Π³ΠΎ условиС провСряСтся послС выполнСния Ρ‚Π΅Π»Π°. НСзависимо ΠΎΡ‚ значСния условия Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° выполняСтся ΠΏΠΎ ΠΊΡ€Π°ΠΉΠ½Π΅ΠΉ ΠΌΠ΅Ρ€Π΅ ΠΎΠ΄Π½Π°ΠΆΠ΄Ρ‹. Π•Π³ΠΎ синтаксичСская Ρ„ΠΎΡ€ΠΌΠ° ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π½ΠΈΠΆΠ΅.

do

 ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€

while (условиС);

ПослС Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½ΠΎΠ³ΠΎ Π² скобки условия ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ do while заканчиваСтся Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ с запятой.

Π’ Ρ†ΠΈΠΊΠ»Π΅ do while ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ выполняСтся ΠΏΡ€Π΅ΠΆΠ΄Π΅, Ρ‡Π΅ΠΌ условиС. ΠŸΡ€ΠΈΡ‡Π΅ΠΌ условиС Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ пустым. Если условиС Π»ΠΎΠΆΠ½ΠΎ, Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ, Π² ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ†ΠΈΠΊΠ» повторяСтся. Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ Π² условии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ слСдуСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π½Π΅ Ρ‚Π΅Π»Π° ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° do while.

НапишСм ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ†ΠΈΠΊΠ» do while для суммирования любого количСства чисСл.

// ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ Π·Π°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Ρ‚ΡŒ Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ ΠΏΠ°Ρ€Ρ‹ чисСл для суммирования

string rsp; // ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² условии, поэтому Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ

            // ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Π² Ρ†ΠΈΠΊΠ»Π΅ do

do {

 cout << "please enter two values: ";

 int val1 = 0, val2 = 0;

 cin >> val1 >> val2;

 cout << "The sum of " << val1 << " and " << val2

      << " = " << val1 + val2 << "\n\n"

      << "More? Enter yes or no: ";

 cin >> rsp;

} while (!rsp.empty() && rsp[0] != 'n');

Π¦ΠΈΠΊΠ» начинаСтся запросом Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄Π²ΡƒΡ… чисСл. Π—Π°Ρ‚Π΅ΠΌ выводится ΠΈΡ… сумма ΠΈ слСдуСт запрос, ΠΆΠ΅Π»Π°Π΅Ρ‚ Π»ΠΈ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΡΡƒΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π»Π΅Π΅. ΠžΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ провСряСтся Π² условии. Если Π²Π²ΠΎΠ΄ пуст ΠΈΠ»ΠΈ начинаСтся с n, Ρ†ΠΈΠΊΠ» Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ΡΡ. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Ρ†ΠΈΠΊΠ» повторяСтся.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ условиС Π½Π΅ обрабатываСтся Π΄ΠΎ окончания ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠ°, Ρ†ΠΈΠΊΠ» do while Π½Π΅ позволяСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² условии.

do {

 // ...

 mumble(fΠΎΠΎ) ;

} while (int foo = get_foo()); // ошибка: объявлСниС Π² условии do

Если ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π² условии, Ρ‚ΠΎ любоС ΠΈΡ… использованиС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ ΠΏΡ€Π΅ΠΆΠ΄Π΅ опрСдСлСния!

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.18. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Ρ†ΠΈΠΊΠ»ΠΎΠ². Π˜ΡΠΏΡ€Π°Π²ΡŒΡ‚Π΅ всС ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ ошибки.

(a) do

     int v1, v2;

     cout << "Please enter two numbers to sum:";

     if (cin >> v1 >> v2)

      cout << "Sum is: " << v1 + v2 << endl;

    while (cin);

(b) do {

     // ...

    } while (int ival = get_response());

(c) do {

     int ival = get_response();

    } while (ival);

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 5.19. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΡƒΡŽ Ρ†ΠΈΠΊΠ» do while для цикличСского запроса Ρƒ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ Π΄Π²ΡƒΡ… строк ΠΈ указания, которая ΠΈΠ· Π½ΠΈΡ… мСньшС Π΄Ρ€ΡƒΠ³ΠΎΠΉ.

5.5. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΏΡ€Π΅Ρ€Ρ‹Π²Π°ΡŽΡ‚ ΠΏΠΎΡ‚ΠΎΠΊ выполнСния. Π―Π·Ρ‹ΠΊ Π‘++ прСдоставляСт Ρ‡Π΅Ρ‚Ρ‹Ρ€Π΅ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π°: break, continue ΠΈ goto, рассматриваСмыС Π² этой Π³Π»Π°Π²Π΅, ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ return, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π±ΡƒΠ΄Π΅Ρ‚ описан Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 6.3.

5.5.1. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅Ρ‚ блиТайший ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ while, do while, for ΠΈΠ»ΠΈ switch. Π’Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ возобновляСтся с ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π³ΠΎ нСпосрСдствСнно Π·Π° Π·Π°Π²Π΅Ρ€ΡˆΠ°Π΅ΠΌΡ‹ΠΌ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ.

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break ΠΌΠΎΠΆΠ΅Ρ‚ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π² Ρ†ΠΈΠΊΠ»Π΅ ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π΅ switch (Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ ΠΈΠ»ΠΈ Π±Π»ΠΎΠΊΠΈ, Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Π΅ Π² эти Ρ†ΠΈΠΊΠ»Ρ‹). ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ break воздСйствуСт лишь Π½Π° блиТайший ΠΎΠΊΡ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΠΉ Ρ†ΠΈΠΊΠ» ΠΈΠ»ΠΈ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ switch.

string buf;

while (cin >> buf && !buf.empty()) {