Вектор в C++ Стандартна библиотека с шаблони (STL) с пример

⚡ Умно обобщение

Вектор в C++ е динамичен масив от библиотеката със стандартни шаблони, който се преоразмерява автоматично при добавяне или премахване на елементи, съхранявайки елементите в непрекъсната памет, така че програмистите да могат да имат достъп до тях и да ги обхождат с помощта на итератори.

  • 📦 Динамичен масив: A C++ Векторът се увеличава или свива автоматично, за разлика от статичния масив с фиксиран размер.
  • 🧩 Заглавка и синтаксис: Включете заглавката на вектора, след което декларирайте вектора име за съхраняване на типизирани елементи.
  • 🧭 Итератори: begin(), end(), cbegin() и cend() се движат през векторни елементи като указатели.
  • 🛠️ модификатори: push_back(), insert(), pop_back(), erase() и clear() променят съдържанието на вектора.
  • 📐 Капацитет: XNUMXл. size(), capacity(), max_size(), resize() и empty() отчитат или коригират паметта.
  • 🤖 AI помощ: GitHub Copilot и подобни AI асистенти изграждат векторни операции от кратък коментар.

C++ Вектор STL

Какво е C++ Вектор?

A C++ Векторът е динамичен масив, способен да се самооразмерява автоматично. Преоразмеряването се случва след добавяне или изтриване на елемент от вектора. Съхранението се обработва автоматично от контейнера. Елементите на вектора се съхраняват в непрекъснато хранилище. Това позволява C++ програмисти за достъп и преминаване през векторните елементи с помощта на итератори.

Вмъкването на нови данни във вектор се извършва в неговия край. Това отнема диференциално време. Премахването на елемент от вектор отнема постоянно време. Причината е, че няма нужда да се променя размерът на вектора. Вмъкването или изтриването на елемент в началото на вектора отнема линейно време.

Преди да пишете код с вектори, е полезно да знаете кога те са правилният контейнер, към който да посегнете.

Кога да използваме вектор?

A C++ вектор трябва да се използва при следните обстоятелства:

  • Когато работите с елементи от данни, които се променят последователно.
  • Ако размерът на данните не е известен преди началото, векторът няма да изисква от вас да задавате максималния размер на контейнера.

Как да инициализирате вектори в C++

Синтаксисът на векторите в C++ е:

vector <data-type> name (items)

Както е показано по-горе, започваме с ключовата дума vector.

  • - тип данни е типът данни на елементите, които ще се съхраняват във вектора.
  • - име е името на вектора или елементите от данните.
  • - елементи обозначава броя на елементите за векторните данни. Този параметър е по избор.

След като векторът съществува, итераторите ви дават начин за придвижване между неговите елементи, подобен на указател.

Итератори

Целта на итераторите е да ни помогнат да осъществим достъп до елементите, съхранени във вектор. Това е обект, който работи като указател. Ето често срещаните итератори, поддържани от C++ вектори:

  • вектор::начало(): дава итератор, който сочи към първия елемент на вектора.
  • вектор::край(): той дава итератор, който сочи към последния елемент на вектора.
  • вектор::cbegin(): Същото е като vector::begin(), но няма възможност за промяна на елементи.
  • вектор::cend(): Същото е като vector::end(), но не може да променя векторни елементи.

Следващият пример попълва вектор и след това го обхожда с променливи и константни итератори.

Пример 1

#include <iostream> 
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;

	for (int a = 1; a <= 5; a++)

		nums.push_back(a);

	cout << "Output from begin and end: ";

	for (auto a = nums.begin(); a != nums.end(); ++a)

		cout << *a << " ";

	cout << "\nOutput from cbegin and cend: ";

	for (auto a = nums.cbegin(); a != nums.cend(); ++a)

		cout << *a << " ";

	return 0;
}

Изход:

C++ векторни итератори Пример 1 изход

Ето екранна снимка на кода:

C++ векторни итератори Пример 1 код

Code Обяснение:

  1. Включете заглавния файл на iostream в нашия код. Това ще ни позволи да четем от и да пишем в конзолата.
  2. Включете векторния заглавен файл в нашия код. Това ще ни позволи да работим с вектори в C++.
  3. Включете пространството от имена std, за да използвате неговите класове и функции, без да го извиквате.
  4. Извикайте функцията main(), в която трябва да се добави логиката на програмата.
  5. { маркира началото на тялото на функцията main().
  6. Декларирайте вектор с име nums, за да съхранявате набор от цели числа.
  7. Създайте цикъл for, който ще ни помогне да итерираме върху вектора. Променливата ще ни помогне да итерираме върху елементите на вектора, от 1-ви до 5-ти елемент.
  8. Натиснете елементи във вектора num отзад. За всяка итерация това ще добави текущата стойност на променлива a към вектора, който е от 1 до 5.
  9. Отпечатайте малко текст на конзолата.
  10. Използвайте променлива на итератор a, за да итерирате елементите на векторни номера от началото до елемента след края. Обърнете внимание, че използваме итератори vector::begin() и vector::end().
  11. Отпечатайте стойностите, посочени от променливата на итератора a на конзолата за всяка итерация.
  12. Отпечатайте текст на конзолата. \n е знак за нов ред, който премества курсора на новия ред, за да отпечата оттам.
  13. Използвайте итераторна променлива, за да итерирате върху елементите на вектор nums от началото до елемента след края. Обърнете внимание, че използваме итератори vector::cbegin() и vector::cend().
  14. Отпечатайте стойностите, посочени от променливата на итератора a на конзолата за всяка итерация.
  15. Основната функция трябва да върне стойност, ако програмата работи успешно.
  16. Край на тялото на функцията main().

Модификатори

Модификаторите се използват за промяна на значението на посочения тип данни. Ето често срещаните модификатори в C++:

  • вектор :: push_back (): Този модификатор избутва елементите отзад.
  • вектор::вмъкване(): За вмъкване на нови елементи във вектор на определено място.
  • вектор :: pop_back (): Този модификатор премахва векторните елементи отзад.
  • вектор::изтриване(): Използва се за премахване на набор от елементи от определеното място.
  • вектор :: ясно (): Той премахва всички векторни елементи.

Следващият пример прилага тези модификатори последователно, за да види как се променя вектор.

Пример 2

#include <iostream>
#include <vector> 

using namespace std;
int main()
{
	vector<int> nums;
	
	nums.assign(5, 1);

	cout << "Vector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.push_back(2);
	int n = nums.size();
	cout << "\nLast element: " << nums[n - 1];

	nums.pop_back();

	cout << "\nVector contents: ";
	for (int a = 0; a < nums.size(); a++)
		cout << nums[a] << " ";

	nums.insert(nums.begin(), 7);

	cout << "\nFirst element: " << nums[0];
	
	nums.clear();
	cout << "\nSize after clear(): " << nums.size();			
}

Изход:

C++ модификатори на вектори Пример 2 изход

Ето екранна снимка на кода:

C++ Пример 2 код за модификатори на вектори

Code Обяснение:

  1. Включете заглавния файл на iostream в нашия код, за да използвате неговите функции.
  2. Включете векторния заглавен файл в нашия код, за да използвате неговите функции.
  3. Включете пространството от имена std, за да използвате неговите класове, без да го извиквате.
  4. Извикайте функцията main(). Логиката на програмата трябва да бъде добавена в нейното тяло.
  5. Началото на тялото на функцията main().
  6. Декларирайте вектор с име nums, за да съхранявате някои цели числа.
  7. Съхранявайте 5 елемента във вектора nums. Всеки със стойност 1.
  8. Отпечатайте малко текст на конзолата.
  9. Използвайте променлива на итератор a, за да обхождате елементите на векторни номера.
  10. Отпечатайте стойностите на векторни номера на конзолата за всяка итерация.
  11. Добавете стойността 2 към края на вектора nums.
  12. Декларирайте целочислена променлива n, за да съхраните размера на вектора nums.
  13. Отпечатайте последната стойност на векторни числа заедно с друг текст. Трябва да върне 2.
  14. Премахнете последния елемент от вектора nums. 2-те ще бъдат премахнати.
  15. Отпечатайте текст на конзолата. \n премества курсора на новия ред, за да отпечата текста там.
  16. Използвайте променлива на итератор a, за да обхождате елементите на векторни номера.
  17. Отпечатайте стойностите на векторни номера на конзолата за всяка итерация.
  18. Вмъкнете стойността 7 в началото на вектора nums.
  19. Отпечатайте първата стойност на векторни числа заедно с друг текст. Трябва да върне 7.
  20. Изтрийте всички елементи от вектора nums.
  21. Отпечатайте размера на вектора num заедно с друг текст след изчистване на цялото съдържание. Трябва да върне 0.
  22. Край на тялото на функцията main().

Капацитет

Използвайте следното функции за да се определи капацитетът на вектор:

  • Размер() – Връща броя на елементите във вектор.
  • Max_size() – Връща най-големия брой елементи, които един вектор може да съхрани.
  • Капацитет() – Връща количеството пространство за съхранение, разпределено на вектор.
  • Преоразмеряване() – Преоразмерява контейнера, за да съдържа n елемента. Ако текущият размер на вектора е по-голям от n, задните елементи ще бъдат премахнати от вектора. Ако текущият размер на вектора е по-малък от n, в задната част на вектора ще бъдат добавени допълнителни елементи.
  • Празно() – връща true, ако векторът е празен. В противен случай връща false.

Този последен пример отчита и коригира съхранението на вектор, използвайки функциите за капацитет по-горе.

Пример 3

#include <iostream> 
#include <vector> 
using namespace std;
int main() {
	vector<int> vector1;
	for (int x = 1; x <= 10; x++)
		vector1.push_back(x);
	cout << "Vector size: " << vector1.size()<< endl;
	cout << "Vector capacity: " << vector1.capacity() << endl;
	cout << "Maximum size of vector: " << vector1.max_size()<< endl;
	vector1.resize(5);
	cout << "Vector size after resizing: " << vector1.size() << endl;
	if (vector1.empty() == false)
		cout << "Vector is not empty"<<endl;
	else
		cout << "Vector is empty"<<endl;
	return 0;
}

Изход:

C++ векторен капацитет Пример 3 изход

Ето екранна снимка на кода:

C++ Пример 3 код за векторен капацитет

Code Обяснение:

  1. Включете заглавния файл на iostream в нашия код, за да използвате неговата функция.
  2. Включете векторния заглавен файл в нашия код, за да използвате неговите функции.
  3. Включете пространството от имена std в нашия код, за да използвате неговите класове, без да го извиквате.
  4. Извикайте функцията main(). Логиката на програмата трябва да се добави в тялото на тази функция.
  5. Създайте вектор с име vector1 за съхраняване на цели числа.
  6. Използвайте for цикъл, за да създадете променлива x със стойности от 1 до 10.
  7. Поставете стойностите на променливата x във вектора.
  8. Отпечатайте размера на вектора заедно с друг текст на конзолата.
  9. Отпечатайте капацитета на вектора заедно с друг текст на конзолата.
  10. Отпечатайте максималния брой елементи, които векторът може да побере заедно с друг текст на конзолата.
  11. Преоразмерете вектора, за да съдържа само 5 елемента.
  12. Отпечатайте новия размер на вектора заедно с друг текст.
  13. Проверете дали векторът не е празен.
  14. Отпечатайте текст на конзолата, ако векторът не е празен.
  15. Използвайте оператор else, за да посочите какво да направите, ако векторът е празен.
  16. Текст за отпечатване на конзолата, ако векторът е празен.
  17. Програмата трябва да върне стойност при успешно завършване.
  18. Край на тялото на функцията main().

Въпроси и Отговори

Векторът е динамичен масив, който се самооразмерява автоматично и знае собствения си размер, докато вграденият масив има фиксирана дължина, зададена по време на компилация. Векторите управляват паметта вместо вас; суровите масиви не го правят.

Използвайте оператора за индекс, като например nums[0], за бърз директен достъп. Член-функцията at(), подобно на nums.at(0), прави същото, но хвърля изключение out_of_range, когато индексът е невалиден, което я прави по-безопасна.

Декларирайте вектор, чиито елементи самите по себе си са вектори, например вектор > мрежа. Можете да я оразмерите с конструктори или с push_back редове. Всеки вътрешен вектор може да расте независимо, което ви дава гъвкава, променяща се матрица.

Векторът съхранява елементи в непрекъсната памет с бърз произволен достъп, докато std::list е двойно свързан списък с бързо вмъкване или изтриване навсякъде, но без директно индексиране. Изберете въз основа на вашия модел на достъп.

Включете заглавката на алгоритъма и извикайте std::sort с итераторите begin и end, както в sort(nums.begin(), nums.end()). Сортирането е възходящо по подразбиране; предайте персонализиран сравнител или по-висок. () за сортиране в низходящ ред.

Да. Векторът е шаблон и може да съдържа всякакъв тип, включително низ, персонализирани класове и дори други вектори. Декларирайте типа на елемента в ъгловите скоби, например вектор или вектор .

Да. Асистентите по кодиране с изкуствен интелект превръщат кратък подкаст или коментар в работещ векторен код, включително декларация, цикли на отпадане и итерация. Винаги преглеждайте предложените типове, граници и обработка на капацитет, тъй като изкуственият интелект може да пропусне специфичните за проекта изисквания.

Да. Копилот на GitHub Предлага декларации на вектори, извиквания на push_back и insert, както и итераторни цикли, докато пишете. Справя се добре с повтарящи се шаблонни елементи, въпреки че все пак трябва да проверите индексите, преоразмеряването и логиката преди компилиране.

Обобщете тази публикация с: