Общие тонкости в векторных 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>
using
namespace
std;
int
main()
{
vector<
int
> vect;
for
(
int
i = 0; i < 5; i++)
vect.push_back(i);
// Resizing vector to size 10
vect.resize(10);
// Prints 0 1 2 3 4 0 0 0 0 0
for
(
int
i = 0; i < vect.size(); i++)
cout << vect[i] <<
" "
;
cout <<
" "
;
vect.push_back(50);
// Prints 0 1 2 3 4 0 0 0 0 0 50
for
(
int
i = 0; i < vect.size(); i++)
cout << vect[i] <<
" "
;
return
0;
}
Выход: 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>
using
namespace
std;
// The vect here is a copy of vect in main()
void
func(vector<
int
> vect)
{
vect.push_back(30);
}
int
main()
{
vector<
int
> vect;
vect.push_back(10);
vect.push_back(20);
func(vect);
// vect remains unchanged after function
// call
for
(
int
i=0; i<vect.size(); i++)
cout << vect[i] <<
" "
;
return
0;
}
Выход :
10 20
В ситуациях, когда нам фактически не нужно иметь копию вектора, объявление должно быть сделано следующим образом:
// Рекомендуется передавать векторы по ссылке // где это возможно. int func (вектор <int> и вектор) { }
Эта статья предоставлена Супийа Шриватса . Если вам нравится GeeksforGeeks, и вы хотели бы внести свой вклад, вы также можете написать статью и отправить ее по электронной почте на deposit@geeksforgeeks.org. Посмотрите, как ваша статья появляется на главной странице GeeksforGeeks, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.