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

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

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

vector<int> v1(10);    // v1 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0

vector<int> v2{10};    // v2 ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ элСмСнт со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 10

vector<int> v3(10, 1); // v3 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 1

vector<int> v4{10, 1}; // v4 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° элСмСнта со значСниями 10 ΠΈ 1

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

ИспользованиС Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобок, {...}, ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚ ΠΏΠΎΠΏΡ‹Ρ‚ΠΊΡƒ списочной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ, Ссли класс способСн ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ значСния Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках ΠΊΠ°ΠΊ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ² элСмСнтов, Ρ‚ΠΎ ΠΎΠ½ Ρ‚Π°ΠΊ ΠΈ сдСлаСт. Если это Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Ρ‚ΠΎ слСдуСт Ρ€Π°ΡΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ЗначСния, прСдоставлСнныС ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² v2 ΠΈ v4, Ρ€Π°ΡΡΠΌΠ°Ρ‚Ρ€ΠΈΠ²Π°ΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ значСния элСмСнтов. Π­Ρ‚ΠΎ списочная инициализация ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ²; Ρƒ ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ΄ΠΈΠ½ ΠΈ Π΄Π²Π° элСмСнта соотвСтствСнно.

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

vector<string> v5{"hi"}; // списочная инициализация: v5 ΠΈΠΌΠ΅Π΅Ρ‚

                         // ΠΎΠ΄ΠΈΠ½ элСмСнт

vector<string> v6("hi"); // ошибка: нСльзя ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈΠ·

                         // строкового Π»ΠΈΡ‚Π΅Ρ€Π°Π»Π°

vector<string> v7{10}; // v7 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…

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

vector<string> v8{10, "hi"}; // v8 ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов со

                             // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "hi"

Π₯отя Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Π½Ρ‹ Π²ΠΎ всСх этих опрСдСлСниях, ΠΊΡ€ΠΎΠΌΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ, Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€ v5 ΠΈΠΌΠ΅Π΅Ρ‚ ΡΠΏΠΈΡΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Для списочной ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° значСния Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Ρ… скобках Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏΡƒ элСмСнта. НСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ‚ΠΈΠΏΠ° int для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ строки, поэтому ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Ρ‹ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² v1 ΠΈ v8 Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ Π±Ρ‹Ρ‚ΡŒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ элСмСнтов. Если списочная инициализация Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Π°, компилятор ΠΈΡ‰Π΅Ρ‚ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ способы ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ².

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.12. Π•ΡΡ‚ΡŒ Π»ΠΈ ошибки Π² ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… опрСдСлСниях Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²?

ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, Ρ‡Ρ‚ΠΎ Π΄Π΅Π»Π°ΡŽΡ‚ допустимыС опрСдСлСния. ΠžΠ±ΡŠΡΡΠ½ΠΈΡ‚Π΅, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Π½Π΅ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½Ρ‹ нСдопустимыС опрСдСлСния.

(a) vector<vector<int>> ivec;

(b) vector<string> svec = ivec;

(c) vector<string> svec(10, "null");

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.13. Бколько элСмСнтов находится Π² ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΈΠ· ΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΡ… Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²? ΠšΠ°ΠΊΠΎΠ²Ρ‹ значСния этих элСмСнтов?

(a) vector<int> v1;         (b) vector<int> v2 (10);

(с) vector<int> v3(10, 42); (d) vector<int> v4{10};

(e) vector<int> v5{10, 42}; (f) vector<string> v6{10};

(g) vector<string> v7{10, "hi"};

3.3.2. Π”ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² Π²Π΅ΠΊΡ‚ΠΎΡ€

ΠŸΡ€ΡΠΌΠ°Ρ инициализация элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° осущСствима Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΏΡ€ΠΈ нСбольшом количСствС исходных Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ, ΠΏΡ€ΠΈ ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ всСх элСмСнтов Ρ‚Π΅ΠΌ ΠΆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Но ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ ΠΏΡ€ΠΈ создании Π²Π΅ΠΊΡ‚ΠΎΡ€Π° нСизвСстно Π½ΠΈ количСство Π΅Π³ΠΎ элСмСнтов, Π½ΠΈ ΠΈΡ… значСния. Но Π΄Π°ΠΆΠ΅ Ссли всС значСния извСстны, Ρ‚ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ большого количСства Ρ€Π°Π·Π½Ρ‹Ρ… Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ ΠΎΡ‡Π΅Π½ΡŒ Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΈΠΌ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ Π΅Π³ΠΎ Π² мСстС создания Π²Π΅ΠΊΡ‚ΠΎΡ€Π°.

Если Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌ Π²Π΅ΠΊΡ‚ΠΎΡ€ со значСниями ΠΎΡ‚ 0 Π΄ΠΎ 9, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΏΠΈΡΠΎΡ‡Π½ΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ. Но Ρ‡Ρ‚ΠΎ Ссли Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΡ‹ элСмСнты ΠΎΡ‚ 0 Π΄ΠΎ 99 ΠΈΠ»ΠΈ ΠΎΡ‚ 0 Π΄ΠΎ 999? Бписочная инициализация Π±Ρ‹Π»Π° Π±Ρ‹ слишком Π³Ρ€ΠΎΠΌΠΎΠ·Π΄ΠΊΠΎΠΉ. Π’ Ρ‚Π°ΠΊΠΈΡ… случаях Π»ΡƒΡ‡ΡˆΠ΅ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΅Π³ΠΎ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ-Ρ‡Π»Π΅Π½ push_back(), Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ элСмСнты Π²ΠΎ врСмя выполнСния. Ѐункция push_back() вставляСт ΠΏΠ΅Ρ€Π΅Π΄Π°Π½Π½ΠΎΠ΅ Π΅ΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ послСдний элСмСнт. Рассмотрим ΠΏΡ€ΠΈΠΌΠ΅Ρ€.

vector<int> v2; // пустой Π²Π΅ΠΊΡ‚ΠΎΡ€

for (int i = 0; i != 100; ++i)

 v2.push_back(i); // Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Ρ… чисСл Π² v2

// ΠΏΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠ΅Π½ΠΈΠΈ Ρ†ΠΈΠΊΠ»Π° v2 ΠΈΠΌΠ΅Π΅Ρ‚ 100 элСмСнтов со значСниями ΠΎΡ‚ 0 Π΄ΠΎ 99

Π₯отя Π·Π°Ρ€Π°Π½Π΅Π΅ извСстно, Ρ‡Ρ‚ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ 100 элСмСнтов, Π²Π΅ΠΊΡ‚ΠΎΡ€ v2 опрСдСляСтся ΠΊΠ°ΠΊ пустой. КаТдая итСрация добавляСт ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅Π΅ ΠΏΠΎ порядку Ρ†Π΅Π»ΠΎΠ΅ число Π² Π²Π΅ΠΊΡ‚ΠΎΡ€ v2 ΠΊΠ°ΠΊ Π½ΠΎΠ²Ρ‹ΠΉ элСмСнт.

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

// Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ слова со стандартного устройства Π²Π²ΠΎΠ΄Π° ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡ‚ΡŒ ΠΈΡ…

// Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅ ΠΊΠ°ΠΊ элСмСнты

string word;

vector<string> text; // пустой Π²Π΅ΠΊΡ‚ΠΎΡ€

while (cin >> word) {

 text.push_back(word); // Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ слово Π² тСкст

}

И снова всС начинаСтся с пустого Π²Π΅ΠΊΡ‚ΠΎΡ€Π°. На сСй Ρ€Π°Π·, нСизвСстноС количСство Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ читаСтся ΠΈ сохраняСтся Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅ строк text.

ΠšΠ»ΡŽΡ‡Π΅Π²Π°Ρ концСпция. Рост Π²Π΅ΠΊΡ‚ΠΎΡ€Π° эффСктивСн

Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎΠ±Ρ‹ рСализация шаблона vector обСспСчивала эффСктивноС Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π²ΠΎ врСмя выполнСния. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ рост Π²Π΅ΠΊΡ‚ΠΎΡ€Π° эффСктивСн, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° сразу Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΠ³ΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° Π·Π°Ρ‡Π°ΡΡ‚ΡƒΡŽ являСтся Π½Π΅Π½ΡƒΠΆΠ½Ρ‹ΠΌ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π°ΠΆΠ΅ привСсти ΠΊ ΠΏΠΎΡ‚Π΅Ρ€Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ. Π˜ΡΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ являСтся случай, ΠΊΠΎΠ³Π΄Π° всС элСмСнты Π½ΡƒΠΆΠ΄Π°ΡŽΡ‚ΡΡ Π² ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΈ. ΠŸΡ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… значСниях элСмСнтов ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ эффСктивнСй ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ пустой Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΈ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ элСмСнты Π²ΠΎ врСмя выполнСния, ΠΏΠΎ ΠΌΠ΅Ρ€Π΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ значСния становятся извСстны. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ Π±ΡƒΠ΄Π΅Ρ‚ продСмонстрировано Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 9.4, шаблон vector прСдоставляСт возмоТности для дальнСйшСго увСличСния ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠΈ элСмСнтов Π²ΠΎ врСмя выполнСния.

Начало с пустого Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΈ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π²ΠΎ врСмя выполнСния ΠΊΠ°Ρ€Π΄ΠΈΠ½Π°Π»ΡŒΠ½ΠΎ отличаСтся ΠΎΡ‚ использования встроСнных массивов Π² языкС Π‘ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… языках. Π’ частности, Ссли Π²Ρ‹ Π·Π½Π°ΠΊΠΎΠΌΡ‹ с языком Π‘ ΠΈΠ»ΠΈ Java, Ρ‚ΠΎ, вСроятно, ΠΏΠΎΠ»Π°Π³Π°Π΅Ρ‚Π΅, Ρ‡Ρ‚ΠΎ Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€ Π² Π΅Π³ΠΎ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΠΎΠΌ Ρ€Π°Π·ΠΌΠ΅Ρ€Π΅, Π½ΠΎ фактичСски ΠΈΠΌΠ΅Π΅Ρ‚ мСсто ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎΠ΅.

ΠŸΠΎΡΠ»Π΅Π΄ΡΡ‚Π²ΠΈΡ возмоТности добавлСния элСмСнтов Π² Π²Π΅ΠΊΡ‚ΠΎΡ€

Π’ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ элСмСнтов Π² Π²Π΅ΠΊΡ‚ΠΎΡ€ вСсьма эффСктивно, сущСствСнно ΡƒΠΏΡ€ΠΎΡ‰Π°Π΅Ρ‚ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ Π·Π°Π΄Π°Ρ‡ΠΈ программирования. Но эта простота Π½Π°Π»Π°Π³Π°Π΅Ρ‚ Π½ΠΎΠ²Ρ‹Π΅ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΡΡ‚Π²Π° Π½Π° наши ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΡ€Ρ€Π΅ΠΊΡ‚Π½ΠΎΡΡ‚ΡŒ всСх Ρ†ΠΈΠΊΠ»ΠΎΠ², Π΄Π°ΠΆΠ΅ Ссли Ρ†ΠΈΠΊΠ» измСняСт Ρ€Π°Π·ΠΌΠ΅Ρ€ Π²Π΅ΠΊΡ‚ΠΎΡ€Π°.

Π”Ρ€ΡƒΠ³ΠΎΠ΅ послСдствиС динамичСского Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² станСт яснСС, ΠΊΠΎΠ³Π΄Π° ΠΌΡ‹ ΡƒΠ·Π½Π°Π΅ΠΌ большС ΠΎΠ± ΠΈΡ… использовании. Но Π΅ΡΡ‚ΡŒ ΠΎΠ΄Π½ΠΎ послСдствиС, Π½Π° ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ΅ стоит ΠΎΠ±Ρ€Π°Ρ‚ΠΈΡ‚ΡŒ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ ΡƒΠΆΠ΅ сСйчас: ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π°ΠΌ, ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½Ρ‹ΠΌ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 5.4.3, нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for, Ссли Ρ‚Π΅Π»ΠΎ Ρ†ΠΈΠΊΠ»Π° добавляСт элСмСнты Π² Π²Π΅ΠΊΡ‚ΠΎΡ€.

Π’Π΅Π»ΠΎ сСрийного ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€Π° for Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΡΡ‚ΡŒ Ρ€Π°Π·ΠΌΠ΅Ρ€ ΠΏΠ΅Ρ€Π΅Π±ΠΈΡ€Π°Π΅ΠΌΠΎΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ.

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

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.14. ΠΠ°ΠΏΠΈΡˆΠΈΡ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Ρ‡ΠΈΡ‚Π°ΡŽΡ‰ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Ρ… чисСл ΠΈΠ· ΠΏΠΎΡ‚ΠΎΠΊΠ° cin ΠΈ ΡΠΎΡ…Ρ€Π°Π½ΡΡŽΡ‰ΡƒΡŽ ΠΈΡ… Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅.

Π£ΠΏΡ€Π°ΠΆΠ½Π΅Π½ΠΈΠ΅ 3.15. ΠŸΠΎΠ²Ρ‚ΠΎΡ€ΠΈΡ‚Π΅ ΠΏΡ€Π΅Π΄Ρ‹Π΄ΡƒΡ‰ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, Π½ΠΎ Π½Π° сСй Ρ€Π°Π· Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ строки.

3.3.3. Π”Ρ€ΡƒΠ³ΠΈΠ΅ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ

ΠšΡ€ΠΎΠΌΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ push_back(), шаблон vector прСдоставляСт Π΅Ρ‰Π΅ нСсколько ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΉ, Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΈΠ· ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ опСрациям класса string. НаиболСС Π²Π°ΠΆΠ½Ρ‹Π΅ ΠΈΠ· Π½ΠΈΡ… ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 3.5.


Π’Π°Π±Π»ΠΈΡ†Π° 3.5. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с Π²Π΅ΠΊΡ‚ΠΎΡ€Π°ΠΌΠΈ

v.empty() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ true, Ссли Π²Π΅ΠΊΡ‚ΠΎΡ€ v пуст. Π’ ΠΏΡ€ΠΎΡ‚ΠΈΠ²Π½ΠΎΠΌ случаС Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ false v.size() Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v v.push_back(t) ДобавляСт элСмСнт со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ t Π² ΠΊΠΎΠ½Π΅Ρ† Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v v[n] Π’ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ссылку Π½Π° элСмСнт Π² ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ n Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v v1 = v2 ЗамСняСт элСмСнты Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v1 ΠΊΠΎΠΏΠΈΠ΅ΠΉ элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v2 v1 = {a,b,с ... } ЗамСняСт элСмСнты Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v1 ΠΊΠΎΠΏΠΈΠ΅ΠΉ элСмСнтов ΠΈΠ· раздСляСмого запятыми списка v1 == v2 v1 != v2 Π’Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ v1 ΠΈ v2 Ρ€Π°Π²Π½Ρ‹, Ссли ΠΎΠ½ΠΈ содСрТат ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²Ρ‹Π΅ элСмСнты Π² Ρ‚Π΅Ρ… ΠΆΠ΅ позициях <, <=, >, >= Π˜ΠΌΠ΅ΡŽΡ‚ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈ ΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π½Π° Π°Π»Ρ„Π°Π²ΠΈΡ‚Π½Ρ‹ΠΉ порядок

Доступ ΠΊ элСмСнтам Π²Π΅ΠΊΡ‚ΠΎΡ€Π° осущСствляСтся Ρ‚Π°ΠΊΠΈΠΌ ΠΆΠ΅ способом, ΠΊΠ°ΠΊ ΠΈ ΠΊ символам строки: ΠΏΠΎ ΠΈΡ… ΠΏΠΎΠ·ΠΈΡ†ΠΈΠΈ Π² Π²Π΅ΠΊΡ‚ΠΎΡ€Π΅. НапримСр, для ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ всС элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ сСрийный ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ for (Ρ€Π°Π·Π΄Π΅Π» 3.2.3).