Общие тонкости в векторных STL
Предварительное условие - основы работы с векторами
Ниже приведены некоторые важные моменты, которые помогут сэкономить время на мелочах на собеседовании или важном конкурсе кодеров.
- vector <int> vect (10) vs vector <int> vect [10]
// Создает векторный вектор vect [] размером 10 вектор <int> vect (10) // создает массив векторов vect [] размера // 10, где у каждого вектора есть члены типа int вектор <int> vect [10]
- resize () и push_back ():
После использования функции resize () для вектора, если push_back () используется для того же вектора, возвращаемые элементы добавляются в конец вектора с измененным размером, а не в него.// A C++ program to demonstrate that push_back()// happens at the end of resized vector.#include<bits/stdc++.h>usingnamespacestd;intmain(){vector<int> vect;for(inti = 0; i < 5; i++)vect.push_back(i);// Resizing vector to size 10vect.resize(10);// Prints 0 1 2 3 4 0 0 0 0 0for(inti = 0; i < vect.size(); i++)cout << vect[i] <<" ";cout <<" ";vect.push_back(50);// Prints 0 1 2 3 4 0 0 0 0 0 50for(inti = 0; i < vect.size(); i++)cout << vect[i] <<" ";return0;}Выход: 0 1 2 3 4 0 0 0 0 0 0 1 2 3 4 0 0 0 0 0 50
- Функция clear () Она заставляет вектор иметь нулевые элементы, т. е. никаких элементов и не делает элементы для всех нулей.
- Создание двухмерного вектора
// Это не работает vector <vector <int>> vect; // Это отлично работает vector <vector <int>> vect;
Разница между этими двумя операторами заключается в том, что в первом операторе есть пробел между угловыми скобками (>>). Запись без пробела не работает, потому что >> - оператор в C ++.
- Передача векторов функциям:
Когда вектор просто передается в функцию, создается копия вектора. В случае больших векторов это может занять много времени.// C++ program to demonstrate that when vectors// are passed to functions without &, a copy is// created.#include<bits/stdc++.h>usingnamespacestd;// The vect here is a copy of vect in main()voidfunc(vector<int> vect){vect.push_back(30);}intmain(){vector<int> vect;vect.push_back(10);vect.push_back(20);func(vect);// vect remains unchanged after function// callfor(inti=0; i<vect.size(); i++)cout << vect[i] <<" ";return0;}Выход :
10 20
В ситуациях, когда нам фактически не нужно иметь копию вектора, объявление должно быть сделано следующим образом:
// Рекомендуется передавать векторы по ссылке // где это возможно. int func (вектор <int> и вектор) { }
Эта статья предоставлена Супийа Шриватса . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью и отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.