Общие тонкости в векторных STL

Опубликовано: 1 Января, 2022

Предварительное условие - основы работы с векторами

Ниже приведены некоторые важные моменты, которые помогут сэкономить время на мелочах на собеседовании или важном конкурсе кодеров.

  1. vector <int> vect (10) vs vector <int> vect [10]
    // Создает векторный вектор vect [] размером 10
    вектор <int> vect (10) 
    
    // создает массив векторов vect [] размера 
    // 10, где у каждого вектора есть члены типа int
    вектор <int> vect [10]
    
  2. 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
  3. Функция clear () Она заставляет вектор иметь нулевые элементы, т. е. никаких элементов и не делает элементы для всех нулей.
  4. Создание двухмерного вектора
    // Это не работает
    vector <vector <int>> vect;
    
    // Это отлично работает
    vector <vector <int>> vect;

    Разница между этими двумя операторами заключается в том, что в первом операторе есть пробел между угловыми скобками (>>). Запись без пробела не работает, потому что >> - оператор в C ++.

  5. Передача векторов функциям:
    Когда вектор просто передается в функцию, создается копия вектора. В случае больших векторов это может занять много времени.
    // 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, и помогите другим гикам.
Пожалуйста, напишите комментарии, если вы обнаружите что-то неправильное, или вы хотите поделиться дополнительной информацией по теме, обсужденной выше.

Хотите узнать о лучших видео и практических задачах, ознакомьтесь с базовым курсом C ++ для базового и продвинутого уровня C ++ и курсом C ++ STL для базового уровня плюс STL. Чтобы завершить подготовку от изучения языка к DS Algo и многому другому, см. Полный курс подготовки к собеседованию .



C++ C