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

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

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

Ѐиксированный Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° массивов влияСт Ρ‚Π°ΠΊΠΆΠ΅ Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Ρ… конструкторов, Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‰ΠΈΡ… массив. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², созданный ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ массив Π½Π΅ пуст: количСство Π΅Π³ΠΎ элСмСнтов соотвСтствуСт Ρ€Π°Π·ΠΌΠ΅Ρ€Ρƒ, Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Ρ‹ ΠΎΠ½ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (см. Ρ€Π°Π·Π΄Π΅Π» 2.2.1), ΠΊΠ°ΠΊ ΠΈ элСмСнты встроСнного массива (см. Ρ€Π°Π·Π΄Π΅Π» 3.5.1). ΠŸΡ€ΠΈ списочной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ массива количСство ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΏΡ€Π΅Π²Ρ‹ΡˆΠ°Ρ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива. Если ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² мСньшС, Ρ‡Π΅ΠΌ элСмСнтов массива, ΠΎΠ½ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ для ΠΏΠ΅Ρ€Π²Ρ‹Ρ… элСмСнтов, Π° всС ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (см. Ρ€Π°Π·Π΄Π΅Π» 3.3.1). Π’ любом случаС, Ссли Ρ‚ΠΈΠΏΠΎΠΌ элСмСнта являСтся класс, Ρ‚ΠΎ Ρƒ Π½Π΅Π³ΠΎ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ стандартный конструктор, ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΠΈΠΉ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ:

array<int, 10> ia1;        // Π΄Π΅ΡΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Ρ… чисСл, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…

                           // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ

array<int, 10> ia2 = {0,1,2,3,4,5,6,7,8,9}; // списочная инициализация

array<int, 10> ia3 = {42}; // ia3[0] содСрТит Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 42, ΠΎΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅

                           // элСмСнты - Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ρ…ΠΎΡ‚ΡŒ ΠΈ нСльзя ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ массивов встроСнных Ρ‚ΠΈΠΏΠΎΠ² (см. Ρ€Π°Π·Π΄Π΅Π» 3.5.1), для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² array Ρ‚Π°ΠΊΠΎΠ³ΠΎ ограничСния Π½Π΅Ρ‚:

int digs[10] = {0,1,2,3,4,5,6,7,8,9};

int cpy[10] = digs; // ошибка: встроСнныС массивы Π½Π΅ Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚

                    // копирования ΠΈ присвоСния

array<int, 10> digits = {0,1,2,3,4,5,6,7,8,9};

array<int, 10> copy = digits; // ok: Ссли Ρ‚ΠΈΠΏΡ‹ массивов ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚

Как ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ, Ρ‡Ρ‚ΠΎ ΠΈ создаваСмый. Для ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° array ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ‚ΠΈΠΏ элСмСнта ΠΈ Ρ€Π°Π·ΠΌΠ΅Ρ€, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ массива β€” Ρ‡Π°ΡΡ‚ΡŒ Π΅Π³ΠΎ Ρ‚ΠΈΠΏΠ°.

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.11. ΠŸΡ€ΠΈΠ²Π΅Π΄ΠΈΡ‚Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· ΡˆΠ΅ΡΡ‚ΠΈ способов создания ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² vector. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΊΠ°ΠΊΠΈΠ΅ значСния Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Π²Π΅ΠΊΡ‚ΠΎΡ€.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.12. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅ Ρ€Π°Π·Π»ΠΈΡ‡ΠΈΠ΅ ΠΌΠ΅ΠΆΠ΄Ρƒ конструктором, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ для копирования, ΠΈ конструктором ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠΌ Π΄Π²Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 9.13. Как ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ vector<double> ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° list<int> ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° vector<int>? ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΊΠΎΠ΄ для ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ².

9.2.5. ΠŸΡ€ΠΈΡΠ²ΠΎΠ΅Π½ΠΈΠ΅ ΠΈ функция swap()

БвязанныС с присвоСниСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, пСрСчислСнныС Π² Ρ‚Π°Π±Π». 9.4, Π²ΠΎΠ·Π΄Π΅ΠΉΡΡ‚Π²ΡƒΡŽΡ‚ Π½Π° вСсь ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присвоСния замСняСт вСсь Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ элСмСнтов Π² Π»Π΅Π²ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ копиями элСмСнтов ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ:

c1 = c2;      // замСняСт содСрТимоС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c1 ΠΊΠΎΠΏΠΈΠ΅ΠΉ

              // элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c2

c1 = {a,b,c}; // послС присвоСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ c1 ΠΈΠΌΠ΅Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ 3

ПослС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ присвоСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ слСва ΠΈ справа Ρ€Π°Π²Π½Ρ‹. Если ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ ΠΈΠΌΠ΅Π»ΠΈ Π½Π΅Ρ€Π°Π²Π½Ρ‹ΠΉ Ρ€Π°Π·ΠΌΠ΅Ρ€, послС присвоСния Ρƒ ΠΎΠ±ΠΎΠΈΡ… Π±ΡƒΠ΄Π΅Ρ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ· ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°. ПослС Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ присвоСния Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c1 составит 3, Ρ‡Ρ‚ΠΎ соотвСтствуСт количСству Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, прСдставлСнных Π² спискС.


Π’Π°Π±Π»ΠΈΡ†Π° 9.4. ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присвоСния ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ²

c1 = c2 ЗамСняСт элСмСнты ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c1 копиями элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c2. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ c1 ΠΈ c2 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ с = {a, b, с...} ЗамСняСт элСмСнты ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c1 копиями элСмСнтов списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. (НСдопустимо для массива.) swap(c1, c2) c1.swap(c2) ΠžΠ±ΠΌΠ΅Π½ΠΈΠ²Π°Π΅Ρ‚ элСмСнты ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² c1 ΠΈ c2. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ c1 ΠΈ c2 Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΈΠΌΠ΅Ρ‚ΡŒ Ρ‚ΠΎΡ‚ ΠΆΠ΅ Ρ‚ΠΈΠΏ. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ функция swap() выполняСтся Π½Π°ΠΌΠ½ΠΎΠ³ΠΎ быстрСС, Ρ‡Π΅ΠΌ процСсс копирования элСмСнтов ΠΈΠ· ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° c2 Π² c1 ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ присвоСния нСдопустимы для ассоциативных ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ массива seq.assign(b,Π΅) ЗамСняСт элСмСнты Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ seq Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ b ΠΈ Π΅. Π˜Ρ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ b ΠΈ Π΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ Π½Π° элСмСнты Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ seq seq.assign(il) ЗамСняСт элСмСнты Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ seq Ρ‚Π°ΠΊΠΎΠ²Ρ‹ΠΌΠΈ ΠΈΠ· списка ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ il seq.assign(n,t) ЗамСняСт элСмСнты Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ seq Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΠ· n элСмСнтов со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ t

Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ встроСнных массивов, Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅Ρ‡Π½Ρ‹ΠΉ Ρ‚ΠΈΠΏ array ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ присвоСниС. Π£ Π»Π΅Π²Ρ‹Ρ… ΠΈ ΠΏΡ€Π°Π²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ² Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±Ρ‹Ρ‚ΡŒ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹ΠΉ Ρ‚ΠΈΠΏ:

array<int, 10> a1 = {0,1,2,3,4,5,6,7,8,9};

array<int, 10> Π°2 = {0}; // всС элСмСнты со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0

a1 = Π°2;  // Π·Π°ΠΌΠ΅Π½Π° элСмСнтов Π² a1

Π°2 = {0}; // ошибка: нСльзя ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ массиву значСния ΠΈΠ· списка

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ ΠΎΡ‚ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π»Π΅Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π°, Ρ‚ΠΈΠΏ array Π½Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ assign() ΠΈ это Π½Π΅ позволяСт ΠΏΡ€ΠΈΡΠ²Π°ΠΈΠ²Π°Ρ‚ΡŒ значСния ΠΈΠ· списка.

БвязанныС с присвоСниСм ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹ Π΄Π΅Π»Π°ΡŽΡ‚ нСдопустимыми ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ссылки ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ слСва.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign() (Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹)

ΠžΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ присвоСния Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ совпадСния Ρ‚ΠΈΠΏΠΎΠ² Π»Π΅Π²Ρ‹Ρ… ΠΈ ΠΏΡ€Π°Π²Ρ‹Ρ… ΠΎΠΏΠ΅Ρ€Π°Π½Π΄ΠΎΠ². Он ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ всС элСмСнты ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° Π² Π»Π΅Π²Ρ‹ΠΉ. ΠŸΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ (ΠΊΡ€ΠΎΠΌΠ΅ array) ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ Ρ‚Π°ΠΊΠΆΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ assign(), ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽ присвоСниС Ρ€Π°Π·Π½Ρ‹Ρ…, Π½ΠΎ совмСстимых Ρ‚ΠΈΠΏΠΎΠ², ΠΈΠ»ΠΈ присвоСниС ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°ΠΌ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚Π΅ΠΉ. Ѐункция assign() замСняСт всС элСмСнты Π² Π»Π΅Π²ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ копиями элСмСнтов, ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹Ρ… Π² Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π΅. НапримСр, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ assign() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для присвоСния Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ char* ΠΈΠ· Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π² список строк:

list<string> names;

vector<const char*> oldstyle;

names = oldstyle; // ошибка: Ρ‚ΠΈΠΏΡ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π΅ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡŽΡ‚

// ok: ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈΠ· const char* Π² string Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ

names.assign(oldstyle.cbegin(), oldstyle.cend());

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign() замСняСт элСмСнты Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ names копиями элСмСнтов ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π°, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ. АргумСнты Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign() ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡŽΡ‚ количСство элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈ ΠΈΡ… значСния.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ элСмСнты Π·Π°ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½Ρ‹Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign(), Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, для ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π²Ρ‹Π·Π²Π°Π½Π° функция assign().

Вторая вСрсия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ assign() ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ цСлочислСнноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта. Она замСняСт ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ количСство элСмСнтов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π·Π°Π΄Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

// эквивалСнт slist1.clear();

// сопровоТдаСтся slist1.insert(slist1.begin(), 10, "Hiya!");

list<string> slist1(1);     // ΠΎΠ΄ΠΈΠ½ элСмСнт; пустая строка

slist1.assign(10, "Hiya!"); // Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов; со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "Hiya!"

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ swap()

Ѐункция swap() мСняСт мСстами значСния Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Ρ‚ΠΎΠ³ΠΎ ΠΆΠ΅ Ρ‚ΠΈΠΏΠ°. Π’ΠΈΠΏΡ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² ΠΈ ΠΈΡ… элСмСнтов Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ. ПослС обращСния ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ swap() элСмСнты ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ ΠΎΠΏΠ΅Ρ€Π°Π½Π΄Π° ΠΎΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‚ΡΡ Π² Π»Π΅Π²ΠΎΠΌ, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚:

vector<string> svec1(10); // Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· 10 элСмСнтов

vector<string> svec2(24); // Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ· 24 элСмСнтов

svec1.swap(svec2);

ПослС выполнСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ swap() Π²Π΅ΠΊΡ‚ΠΎΡ€ svec1 содСрТит 24 строки, Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ svec2 β€” 10. Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ массивов смСна Π΄Π²ΡƒΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² осущСствляСтся ΠΎΡ‡Π΅Π½ΡŒ быстро β€” сами элСмСнты Π½Π΅ ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ; ΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ лишь Π²Π½ΡƒΡ‚Ρ€Π΅Π½Π½ΠΈΠ΅ структуры Π΄Π°Π½Π½Ρ‹Ρ….

Π—Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ массивов функция swap() Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚, Π½Π΅ удаляСт ΠΈ Π½Π΅ вставляСт элСмСнты, поэтому ΠΎΠ½Π° Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎ выполняСтся Π·Π° постоянноС врСмя.

Благодаря Ρ‚ΠΎΠΌΡƒ Ρ„Π°ΠΊΡ‚Ρƒ, Ρ‡Ρ‚ΠΎ элСмСнты Π½Π΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Ρ‰Π°ΡŽΡ‚ΡΡ, ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ссылки ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅, Π·Π° ΠΈΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° string, ΠΎΡΡ‚Π°ΡŽΡ‚ΡΡ допустимыми. Они ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡŽΡ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Ρ‚Π΅ ΠΆΠ΅ элСмСнты, Ρ‡Ρ‚ΠΎ ΠΈ ΠΏΠ΅Ρ€Π΅Π΄ пСрСстановкой. Однако послС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ swap() эти элСмСнты находятся Π² Π΄Ρ€ΡƒΠ³ΠΎΠΌ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ iter ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°Π» Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅ строк ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ svec1[3]. ПослС Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ swap() ΠΎΠ½ ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡ΠΈΡ‚ элСмСнт Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ svec2[3]. Π’ ΠΎΡ‚Π»ΠΈΡ‡ΠΈΠ΅ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ΠΈΡ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ², Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ swap() для строки Π΄Π΅Π»Π°Π΅Ρ‚ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ΠΌΠΈ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ссылки ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ.