向量STL中常见的微妙之处

先决条件—— 矢量基础

null

以下是一些要点,可以在面试或重要的编码竞赛中节省时间。

  1. 向量 vect(10)与向量 vect[10]
    // Creates a vector vect[] of size 10
    vector <int> vect(10) 
    
    // creates an array of vectors vect[] of size 
    // 10 where each vector has int members
    vector<int> vect[10]
    
  2. 调整大小()并向后推() 在向量上使用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;
    }

    
    

    Output:
    0 1 2 3 4 0 0 0 0 0
    0 1 2 3 4 0 0 0 0 0 50
  3. clear()函数 它使向量有零个元素,也就是说,没有元素,也没有使元素都为0。
  4. 创建二维向量
    // This doesn't work
    vector<vector<int>> vect;
    
    // This works fine
    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

    在我们实际上不需要矢量副本的情况下,声明应如下所示:

    // It is recommended to pass vectors by reference
    // wherever possible.
    int func(vector<int>& vect)
    {
    
    }
    

本文由 苏皮娅·施里瓦萨 .如果你喜欢GeekSforgek,并且想贡献自己的力量,你也可以写一篇文章,并将文章邮寄到contribute@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写评论

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享