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

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

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

// Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ слова со стандартного устройства Π²Π²ΠΎΠ΄Π° ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ

// ΠΈΡ… Π² ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

string word;

while (cin >> word)

 container.push_back(word);

Π’Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_back() создаСт Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° container, увСличивая Π΅Π³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€ Π½Π° 1. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ этого элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ копия значСния ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ word. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΠΌΠ΅Ρ‚ΡŒ любой Ρ‚ΠΈΠΏ: list, vector ΠΈΠ»ΠΈ deque.

ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ класс string β€” это Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ символов, Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ push_back() ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для добавлСния символов Π² Π΅Π΅ ΠΊΠΎΠ½Π΅Ρ†:

void pluralize(size_t cnt, string &word) {

 if (cnt > 1)

  word.push_back('s'); // Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ word += 's'

}

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ концСпция. Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° содСрТат ΠΊΠΎΠΏΠΈΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

Когда ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° ΠΈΠ»ΠΈ вставки Π² Π½Π΅Π³ΠΎ, Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ помСщаСтся копия значСния ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°, Π° Π½Π΅ сам ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. Подобно ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Π² Π½Π΅ ссылочном ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Π΅ (см. Ρ€Π°Π·Π΄Π΅Π» 6.2.1), ΠΌΠ΅ΠΆΠ΄Ρƒ элСмСнтом Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ ΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠΌ, Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ Π±Ρ‹Π»ΠΎ использовано для Π΅Π³ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π½Π΅Ρ‚ Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ связи. ΠŸΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ измСнСния элСмСнта Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ Π²Π»ΠΈΡΡŽΡ‚ Π½Π° исходный ΠΎΠ±ΡŠΠ΅ΠΊΡ‚, ΠΈ Π½Π°ΠΎΠ±ΠΎΡ€ΠΎΡ‚.

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

ΠšΡ€ΠΎΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_back(), ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ list, forward_list ΠΈ deque ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½ΡƒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ push_front(). Она вставляСт Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

list<int> ilist;

// Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Π² Π½Π°Ρ‡Π°Π»ΠΎ ilist

for (size_t ix = 0; ix != 4; ++ix)

 ilist.push_front(ix);

Π­Ρ‚ΠΎΡ‚ Ρ†ΠΈΠΊΠ» добавляСт элСмСнты 0, 1, 2, 3 Π² Π½Π°Ρ‡Π°Π»ΠΎ списка ilist. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ элСмСнт вставляСтся Π² Π½ΠΎΠ²ΠΎΠ΅ Π½Π°Ρ‡Π°Π»ΠΎ списка, Ρ‚.Π΅. ΠΊΠΎΠ³Π΄Π° добавляСтся 1, ΠΎΠ½Π° оказываСтся ΠΏΠ΅Ρ€Π΅Π΄ 0, 2 β€” ΠΏΠ΅Ρ€Π΅Π΄ 1 ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Π΄ΠΎΠ±Π°Π²Π»Π΅Π½Π½Ρ‹Π΅ Π² Ρ†ΠΈΠΊΠ»Π΅ элСмСнты располоТСны Π² ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠΌ порядкС. ПослС этого Ρ†ΠΈΠΊΠ»Π° список ilist содСрТит Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ: 3, 2, 1, 0.

ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ deque, ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ vector быстрый ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½Ρ‹ΠΉ доступ ΠΊ своим элСмСнтам, ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ-Ρ‡Π»Π΅Π½ΠΎΠΌ push_front(), Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ vector β€” Π½Π΅Ρ‚. ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ deque Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΡƒΠ΅Ρ‚ постоянноС врСмя вставки ΠΈ удалСния элСмСнтов Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Как ΠΈ Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° vector, вставка элСмСнтов ΠΈΠ½Π°Ρ‡Π΅ ΠΊΠ°ΠΊ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° deque β€” ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Π°Ρ опСрация.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ vector, string ΠΈΠ»ΠΈ deque способно ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π½Π΅Π΄Π΅ΠΉΡΡ‚Π²ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ всС ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹, ссылки ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚Π΅Π»ΠΈ Π½Π° ΠΈΡ… элСмСнты.

Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Ρ‚ΠΎΡ‡ΠΊΡƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_back() ΠΈ push_front() ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²Π»ΡΡŽΡ‚ вСсьма ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ способ добавлСния ΠΎΠ΄ΠΈΠ½ΠΎΡ‡Π½Ρ‹Ρ… элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† ΠΈΠ»ΠΈ Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Ѐункция insert() ΠΎΠ±Π»Π°Π΄Π°Π΅Ρ‚ Π±ΠΎΠ»Π΅Π΅ ΠΎΠ±Ρ‰ΠΈΠΌ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€ΠΎΠΌ ΠΈ позволяСт Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ любоС количСство элСмСнтов Π² Π»ΡŽΠ±ΡƒΡŽ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. Π•Π΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ vector, deque, list ΠΈ string, Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ forward_list прСдоставляСт собствСнныС спСциализированныС вСрсии этих Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ-Ρ‡Π»Π΅Π½ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 9.3.4.

КаТдая ΠΈΠ· Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ вставки ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Π² качСствС ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π° ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€, ΡƒΠΊΠ°Π·Ρ‹Π²Π°ΡŽΡ‰ΠΈΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ помСщСния элСмСнта (элСмСнтов) Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Он ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт послС ΠΊΠΎΠ½Ρ†Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Π½Π° Π½Π΅ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ элСмСнт послС ΠΊΠΎΠ½Ρ†Π° ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ ΠΈΠΌΠ΅Ρ‚ΡŒ способ вставки элСмСнтов Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, элСмСнт (элСмСнты) Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ. Рассмотрим ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠΉ ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€:

slist.insert(iter, "Hello!"); // Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ "Hello!" прямо ΠΏΠ΅Ρ€Π΅Π΄ iter

Он вставляСт строку со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "Hello" нСпосрСдствСнно ΠΏΠ΅Ρ€Π΅Π΄ элСмСнтом, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ iter.

Π”Π°ΠΆΠ΅ ΠΏΡ€ΠΈ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Ρƒ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ² Π½Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_front(), ΠΊ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert() это Π½Π΅ относится. Ѐункция insert() позволяСт Π²ΡΡ‚Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, Π½Π΅ Π·Π°Π±ΠΎΡ‚ΡΡΡŒ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Ρƒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_front():

vector<string> svec;

list<string> slist;

// эквивалСнт Π²Ρ‹Π·ΠΎΠ²Π° slist.push_front("Hello!");

slist.insert(slist.begin(), "Hello!");

// Π²Π΅ΠΊΡ‚ΠΎΡ€ Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_front(),

// Π½ΠΎ вставка ΠΏΠ΅Ρ€Π΅Π΄ begin() Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°

// Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅: вставка Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π° Π²Π΅Π·Π΄Π΅, Π½ΠΎ вставка Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ΅Ρ‚

// ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ

svec.insert(svec.begin(), "Hello!");

ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρ‹ vector, deque ΠΈ string Π΄ΠΎΠΏΡƒΡΠΊΠ°ΡŽΡ‚ вставку Π² Π»ΡŽΠ±ΡƒΡŽ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ, Π½ΠΎ это ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ.

Вставка Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° элСмСнтов

Π‘Π»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert(), располоТСнныС послС Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ³ΠΎ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Π°, ΠΏΠΎΡ…ΠΎΠΆΠΈ Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ конструкторов ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠ². ВСрсия, ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π°Ρ количСство элСмСнтов ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, добавляСт ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ΅ количСство ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Ρ… элСмСнтов ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ:

svec.insert(svec.end(), 10, "Anna");

Π­Ρ‚ΠΎΡ‚ ΠΊΠΎΠ΄ вставляСт 10 элСмСнтов Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅ΠΊΡ‚ΠΎΡ€Π° svec ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅Ρ‚ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ· Π½ΠΈΡ… строкой "Anna".

Данная вСрсия Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert() ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ ΠΏΠ°Ρ€Ρƒ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΈΠ»ΠΈ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ для вставки элСмСнтов ΠΈΠ· Π΄Π°Π½Π½ΠΎΠ³ΠΎ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ:

vector<string> v = {"quasi", "simba", "frollo", "scar"};

// Π²ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ Π΄Π²Π° послСдних элСмСнта Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v Π² Π½Π°Ρ‡Π°Π»ΠΎ slist

slist.insert(slist.begin(), v.end() - 2, v.end());

slist.insert(slist.end(), {"these", "words", "will",

                           "go", "at", "the", "end"});

// ошибка Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ выполнСния:

// ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π°ΡŽΡ‰ΠΈΠ΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρ‹

// Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ измСняСтся

slist.insert(slist.begin(), slist.begin(), slist.end());

ΠŸΡ€ΠΈ ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‡Π΅ ΠΏΠ°Ρ€Ρ‹ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠ² ΠΎΠ½ΠΈ Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΡ‚Π½ΠΎΡΠΈΡ‚ΡŒΡΡ ΠΊ Ρ‚ΠΎΠΌΡƒ ΠΆΠ΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Ρƒ, ΠΊ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ Π΄ΠΎΠ±Π°Π²Π»ΡΡŽΡ‚ΡΡ элСмСнты.

По Π½ΠΎΠ²ΠΎΠΌΡƒ стандарту вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert(), ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰ΠΈΠ΅ количСство ΠΈΠ»ΠΈ Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ Π½Π° ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ вставлСнный элСмСнт. (Π’ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΠΈΡ… вСрсиях Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ эти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π»ΠΈ Ρ‚ΠΈΠΏ void.) Если Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ пуст, Π½ΠΈΠΊΠ°ΠΊΠΈΠ΅ элСмСнты Π½Π΅ Π²ΡΡ‚Π°Π²Π»ΡΡŽΡ‚ΡΡ, Π° функция Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ свой ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€.

ΠŸΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΠΎΠ³ΠΎ значСния Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert()

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ insert(), ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎΠΉ вставки элСмСнтов Π² ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°:

list<string> lst;

auto iter = lst.begin();

while (cin >> word)

 iter = lst.insert(iter, word); // Ρ‚ΠΎ ΠΆΠ΅, Ρ‡Ρ‚ΠΎ ΠΈ Π²Ρ‹Π·ΠΎΠ² push_front()

Π’Π°ΠΆΠ½ΠΎ ΠΏΠΎΠ½ΠΈΠΌΠ°Ρ‚ΡŒ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ ΠΈΠΌΠ΅Π½Π½ΠΎ Ρ†ΠΈΠΊΠ», ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ этому, эквивалСнтСн Π²Ρ‹Π·ΠΎΠ²Ρƒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_front().

ΠŸΠ΅Ρ€Π΅Π΄ Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ iter инициализируСтся Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅ΠΌΡ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ lst.begin(). ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ insert() ΠΏΠΎΠ»ΡƒΡ‡Π°Π΅Ρ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΎΡ‡ΠΈΡ‚Π°Π½Π½ΡƒΡŽ строку ΠΈ ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ Π΅Π΅ ΠΏΠ΅Ρ€Π΅Π΄ элСмСнтом, ΠΎΠ±ΠΎΠ·Π½Π°Ρ‡Π΅Π½Π½Ρ‹ΠΌ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ iter. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π΅Π½Π½ΠΎΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ insert(), являСтся ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ΠΎΠΌ Π½Π° этот Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт. ΠŸΡ€ΠΈΡΠ²ΠΎΠΈΠΌ этот ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€ ΠΈΡ‚Π΅Ρ€Π°Ρ‚ΠΎΡ€Ρƒ iter ΠΈ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΠΈΠΌ Ρ†ΠΈΠΊΠ», читая Π΄Ρ€ΡƒΠ³ΠΎΠ΅ слово. Пока Π΅ΡΡ‚ΡŒ слова для вставки, каТдая итСрация Ρ†ΠΈΠΊΠ»Π° while вставляСт Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ iter ΠΈ снова присваиваСт Π΅ΠΌΡƒ ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Π½Π΅Π΄Π°Π²Π½ΠΎ вставлСнного элСмСнта. Π­Ρ‚ΠΎΡ‚ (Π½ΠΎΠ²Ρ‹ΠΉ) элСмСнт являСтся ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, каТдая итСрация вставляСт элСмСнт ΠΏΠ΅Ρ€Π΅Π΄ ΠΏΠ΅Ρ€Π²Ρ‹ΠΌ элСмСнтом Π² спискС.

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

Новый стандарт Π²Π²ΠΎΠ΄ΠΈΡ‚ Ρ‚Ρ€ΠΈ Π½ΠΎΠ²Ρ‹Ρ… Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° β€” emplace_front(), emplace() ΠΈ emplace_back(), ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ элСмСнты, Π° Π½Π΅ ΠΊΠΎΠΏΠΈΡ€ΡƒΡŽΡ‚. Они ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‚ функциям push_front(), insert() ΠΈ push_back(), ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‰ΠΈΠΌ ΠΏΠΎΠΌΠ΅Ρ‰Π°Ρ‚ΡŒ элСмСнт Π² Π½Π°Ρ‡Π°Π»ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π°, ΠΏΠ΅Ρ€Π΅Π΄ ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ·ΠΈΡ†ΠΈΠ΅ΠΉ ΠΈΠ»ΠΈ Π² ΠΊΠΎΠ½Π΅Ρ† ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° соотвСтствСнно.

Когда происходит Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ-Ρ‡Π»Π΅Π½Π° insert() ΠΈΠ»ΠΈ push(), ΠΈΠΌ пСрСдаСтся ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° элСмСнта для копирования Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€. Когда происходит Π²Ρ‹Π·ΠΎΠ² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ emplace(), Π΅Π΅ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Ρ‹ ΠΏΠ΅Ρ€Π΅Π΄Π°ΡŽΡ‚ΡΡ конструктору Ρ‚ΠΈΠΏΠ° элСмСнта, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ создаСт элСмСнт нСпосрСдствСнно Π² области, ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅ΠΌΠΎΠΉ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΎΠΌ. ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ с содСрТит элСмСнты Ρ‚ΠΈΠΏΠ° Sales_data (см. Ρ€Π°Π·Π΄Π΅Π» 7.1.4):

// создаСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ класса Sales_data Π² ΠΊΠΎΠ½Ρ†Π΅ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° с

// ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ конструктор класса Sales_data с трСмя Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°ΠΌΠΈ

с.emplace_back("978-05903534 03", 25, 15.99);

// ошибка: Π½Π΅Ρ‚ вСрсии Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_back(), ΠΏΠΎΠ»ΡƒΡ‡Π°ΡŽΡ‰Π΅ΠΉ Ρ‚Ρ€ΠΈ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°