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

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

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

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

Π’ случаС Π²Π΅ΠΊΡ‚ΠΎΡ€Π° прСдоставляСмой Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠΉ ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠ΅ΠΉ являСтся Ρ‚ΠΈΠΏ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ², ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠ΄Π΅Ρ€ΠΆΠ°Ρ‚ΡŒ:

vector<int> ivec;             // ivec содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° int

vector<Sales_item> Sales_vec; // содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ класса Sales_item

vector<vector<string>> file;  // Π²Π΅ΠΊΡ‚ΠΎΡ€, содСрТащий Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹

Π’ этом ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ компилятор создаСт Ρ‚Ρ€ΠΈ Ρ€Π°Π·Π½Ρ‹Ρ… экзСмпляра шаблона vector: vector<int>, vector<Sales_item> ΠΈ vector<vector<string>>.

vector β€” это шаблон, Π° Π½Π΅ класс. Классам, созданным ΠΏΠΎ ΡˆΠ°Π±Π»ΠΎΠ½Ρƒ vector, слСдуСт ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ Ρ…Ρ€Π°Π½ΠΈΠΌΠΎΠ³ΠΎ элСмСнта, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ vector<int>.

МоТно ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ для содСрТания ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² практичСски любого Ρ‚ΠΈΠΏΠ°. ΠŸΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ссылки Π½Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ (см. Ρ€Π°Π·Π΄Π΅Π» 2.3.1), Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ссылок. Однако Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Π° Π΄Ρ€ΡƒΠ³ΠΈΡ… (Π½Π΅ ссылочных) встроСнных Ρ‚ΠΈΠΏΠΎΠ² ΠΈ Ρ‚ΠΈΠΏΠΎΠ² классов Π²ΠΏΠΎΠ»Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΎΠ²Π°Ρ‚ΡŒ. Π’ частности, ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€, элСмСнтами ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΡΠ²Π»ΡΡŽΡ‚ΡΡ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹.

Π‘Π»Π΅Π΄ΡƒΠ΅Ρ‚ Π·Π°ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΏΡ€Π΅ΠΆΠ½ΠΈΠ΅ вСрсии языка Π‘++ использовали нСсколько ΠΈΠ½ΠΎΠΉ синтаксис опрСдСлСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π°, элСмСнты ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ сами являлись экзСмплярами шаблона vector (ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° шаблона). ΠŸΡ€Π΅ΠΆΠ΄Π΅ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π±Ρ‹Π»ΠΎ ΡΡ‚Π°Π²ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΌΠ΅ΠΆΠ΄Ρƒ Π·Π°ΠΊΡ€Ρ‹Π²Π°ΡŽΡ‰Π΅ΠΉ ΡƒΠ³Π»ΠΎΠ²ΠΎΠΉ скобкой внСшнСй части vector ΠΈ Ρ‚ΠΈΠΏΠΎΠΌ Π΅Π³ΠΎ элСмСнта: Ρ‚.Π΅. vector<vector<int> >, Π° Π½Π΅ vector<vector<int>>.

НСкоторыС компиляторы ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΎΠ²Π°Ρ‚ΡŒ объявлСния Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² Π² старом стилС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ vector<vector<int> >.

3.3.1. ΠžΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΠΈ инициализация Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²

Подобно Π»ΡŽΠ±ΠΎΠΌΡƒ Ρ‚ΠΈΠΏΡƒ класса, шаблон vector ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ способ опрСдСлСния ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ². НаиболСС распространСнныС способы опрСдСлСния Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ² ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Ρ‹ Π² Ρ‚Π°Π±Π». 3.4.

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ (см. Ρ€Π°Π·Π΄Π΅Π» 2.2.1) позволяСт ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ пустой Π²Π΅ΠΊΡ‚ΠΎΡ€ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ°:

vector<string> svec; // инициализация ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ;

                     // Ρƒ svec Π½Π΅Ρ‚ элСмСнтов

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


Π’Π°Π±Π»ΠΈΡ†Π° 3.4. Бпособы ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ Π²Π΅ΠΊΡ‚ΠΎΡ€ΠΎΠ²

vector<T> v1 Π’Π΅ΠΊΡ‚ΠΎΡ€, содСрТащий ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ Ρ‚ΠΈΠΏΠ° T. Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹ΠΉ конструктор v1 пуст vector<T> v2(v1) Π’Π΅ΠΊΡ‚ΠΎΡ€ v2 β€” копия всСх элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v1 vector<T> v2 = v1 Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ v2(v1), v2 β€” копия элСмСнтов Π²Π΅ΠΊΡ‚ΠΎΡ€Π° v1 vector<T> v3(n, val) Π’Π΅ΠΊΡ‚ΠΎΡ€ v3 содСрТит n элСмСнтов со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ val vector<T> v4(n) Π’Π΅ΠΊΡ‚ΠΎΡ€ v4 содСрТит n экзСмпляров ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π° Ρ‚ΠΈΠΏΠ° T, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ vector<T> v5{a,b,с ...} Π’Π΅ΠΊΡ‚ΠΎΡ€ v5 содСрТит ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ элСмСнтов, сколько прСдоставлСно ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ²; элСмСнты ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‚ΡΡ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π°ΠΌΠΈ vector<T> v5 = {a,b,с ... } Π­ΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½Ρ‚ v5{a,b,c ... }

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

vector<int> ivec; // ΠΏΠ΅Ρ€Π²ΠΎΠ½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ пустой

// ΠΏΡ€ΠΈΡΠ²ΠΎΠΈΡ‚ΡŒ ivec нСсколько Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ

vector<int> ivec2(ivec);    // ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты ivec Π² ivec2

vector<int> ivec3 = ivec;   // ΠΊΠΎΠΏΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ элСмСнты ivec Π² ivec3

vector<string> svec(ivec2); // svec содСрТит строки,

                            // Π° Π½Π΅ Ρ†Π΅Π»Ρ‹Π΅ числа

Бписочная инициализация Π²Π΅ΠΊΡ‚ΠΎΡ€Π°

Богласно Π½ΠΎΠ²ΠΎΠΌΡƒ стандарту, Π΅Ρ‰Π΅ ΠΎΠ΄Π½ΠΈΠΌ способом прСдоставлСния Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтам Π²Π΅ΠΊΡ‚ΠΎΡ€Π° являСтся списочная инициализация (см. Ρ€Π°Π·Π΄Π΅Π» 2.2.1), Ρ‚.Π΅. Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΉ Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки список любого количСства Π½Π°Ρ‡Π°Π»ΡŒΠ½Ρ‹Ρ… Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов:

vector<string> articles = {"a", "an", "the"};

Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ Ρƒ Π²Π΅ΠΊΡ‚ΠΎΡ€Π° Π±ΡƒΠ΄Π΅Ρ‚ Ρ‚Ρ€ΠΈ элСмСнта: ΠΏΠ΅Ρ€Π²Ρ‹ΠΉ со Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ "Π°", Π²Ρ‚ΠΎΡ€ΠΎΠΉ β€” "an", послСдний β€” "the".

Как ΡƒΠΆΠ΅ ΡƒΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΎΡΡŒ, язык Π‘++ прСдоставляСт нСсколько Ρ„ΠΎΡ€ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ (см. Ρ€Π°Π·Π΄Π΅Π» 2.2.1). Π’ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΡ…, Π½ΠΎ Π½Π΅ Π²ΠΎ всСх случаях эти Ρ„ΠΎΡ€ΠΌΡ‹ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ взаимозамСняСмо. На настоящий ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΠ»ΠΈΡΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π΄Π²ΡƒΡ… Ρ„ΠΎΡ€ΠΌ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ: инициализация ΠΊΠΎΠΏΠΈΠ΅ΠΉ (с использованиСм Π·Π½Π°ΠΊΠ° =) (см. Ρ€Π°Π·Π΄Π΅Π» 3.2.1), ΠΊΠΎΠ³Π΄Π° прСдоставляСтся Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€; ΠΈ внутриклассовая инициализация (см. Ρ€Π°Π·Π΄Π΅Π» 2.6.1). Π’Ρ€Π΅Ρ‚ΠΈΠΉ способ ΠΏΠΎΠ΄Ρ€Π°Π·ΡƒΠΌΠ΅Π²Π°Π΅Ρ‚ прСдоставлСниС списка Π·Π½Π°Ρ‡Π΅Π½ΠΈΠΉ элСмСнтов, Π·Π°ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹Ρ… Π² Ρ„ΠΈΠ³ΡƒΡ€Π½Ρ‹Π΅ скобки (списочная инициализация). НСльзя ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ список ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠ², ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ ΠΊΡ€ΡƒΠ³Π»Ρ‹Π΅ скобки.

vector<string> v1{"a", "an", "the"}; // списочная инициализация

vector<string> v2("a", "an", "the"); // ошибка

Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ количСства элСмСнтов

Π’Π΅ΠΊΡ‚ΠΎΡ€ ΠΌΠΎΠΆΠ½ΠΎ Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π½Π°Π±ΠΎΡ€ΠΎΠΌ ΠΈΠ· ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π½ΠΎΠ³ΠΎ количСства элСмСнтов, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰ΠΈΡ… ΡƒΠΊΠ°Π·Π°Π½Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Π‘Ρ‡Π΅Ρ‚Ρ‡ΠΈΠΊ Π·Π°Π΄Π°Π΅Ρ‚ количСство элСмСнтов, Π° Π·Π° Π½ΠΈΠΌ слСдуСт исходноС Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· этих элСмСнтов.

vector<int> ivec(10, -1);       // Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов Ρ‚ΠΈΠΏΠ° int, ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΈΠ·

                                // ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ -1

vector<string> svec(10, "hi!"); // Π΄Π΅ΡΡΡ‚ΡŒ строк, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…

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

Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡ значСния

Иногда ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰Π΅Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΎΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΈ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€. Π’ этом случаС ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ инициализация значСния (value initialization), Ρ‚.Π΅. Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° создаст ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ элСмСнта сама. Π­Ρ‚ΠΎ созданноС Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΎΠΉ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ элСмСнта Π² ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π΅. Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° элСмСнта Π²Π΅ΠΊΡ‚ΠΎΡ€Π° зависит ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π΅Π³ΠΎ элСмСнтов.

Если Π²Π΅ΠΊΡ‚ΠΎΡ€ Ρ…Ρ€Π°Π½ΠΈΡ‚ элСмСнты встроСнного Ρ‚ΠΈΠΏΠ°, Ρ‚Π°ΠΊΠΈΠ΅ ΠΊΠ°ΠΊ int, Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ 0. Если элСмСнты ΠΈΠΌΠ΅ΡŽΡ‚ Ρ‚ΠΈΠΏ класса, Ρ‚Π°ΠΊΠΎΠΉ ΠΊΠ°ΠΊ string, Ρ‚ΠΎ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ΠΎΠΌ элСмСнта Π±ΡƒΠ΄Π΅Ρ‚ Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ.

vector<int> ivec(10);    // Π΄Π΅ΡΡΡ‚ΡŒ элСмСнтов, ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ…

                         // Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ 0

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

                         // пустой строкой

Π­Ρ‚Π° Ρ„ΠΎΡ€ΠΌΠ° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈΠΌΠ΅Π΅Ρ‚ Π΄Π²Π° ограничСния. ΠŸΠ΅Ρ€Π²ΠΎΠ΅ β€” Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ классы всСгда Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‚ явного прСдоставлСния ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€Π° (см. Ρ€Π°Π·Π΄Π΅Π» 2.2.1). Если Π²Π΅ΠΊΡ‚ΠΎΡ€ содСрТит ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹, Ρ‚ΠΈΠΏ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅ ΠΈΠΌΠ΅Π΅Ρ‚ значСния ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ, Ρ‚ΠΎ Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ элСмСнта слСдуСт ΠΏΡ€Π΅Π΄ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ самому; Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€Ρ‹ Ρ‚Π°ΠΊΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ², прСдоставив Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Ρ€Π°Π·ΠΌΠ΅Ρ€.

Π’Ρ‚ΠΎΡ€ΠΎΠ΅ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈ прСдоставлСнии количСства элСмСнтов Π±Π΅Π· исходного значСния Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΡ€ΡΠΌΡƒΡŽ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ (direct initialization):

vector<int> vi = 10; // ошибка: Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠ° прямая инициализация

Π—Π΄Π΅ΡΡŒ число 10 ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для указания Π½Π° Ρ‚ΠΎ, ΠΊΠ°ΠΊ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π²Π΅ΠΊΡ‚ΠΎΡ€, β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ½ ΠΎΠ±Π»Π°Π΄Π°Π» Π΄Π΅ΡΡΡ‚ΡŒΡŽ элСмСнтами с ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ значСниями. Число 10 Π½Π΅ "копируСтся" Π² Π²Π΅ΠΊΡ‚ΠΎΡ€. Π‘Π»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ, нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ„ΠΎΡ€ΠΌΡƒ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠΏΠΈΠ΅ΠΉ. Π‘ΠΎΠ»Π΅Π΅ подробная информация ΠΎΠ± этом ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½ΠΈΠΈ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Π½Π° Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ 7.5.4.

Бписочный ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΈΠ»ΠΈ количСство элСмСнтов

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