vector操作

来源:互联网 发布:c语言开发手册 编辑:程序博客网 时间:2024/05/22 01:33

简介:

        vector为了支持快速的随机访问,将每一个元素都紧挨着前一个元素存储。即元素是连续存储的。

           vector优点:

                      支持快速随机访问。

          vector缺点:

                     元素连续存储,带来了内存分配上的问题,不过vector容器采取预留空间的方法。并不是每次都额外开辟空间。

                      所以,实际上比起list和deque容器(顺序容器一共就3个,即vector,list,deque),vector的增长效率通常会更好。

 

重要:

                      一般来说,除非找到选则使用其他容器的更好理由,否则vector容器都是最佳选择。

 

 

1、vector对象的定义和初始化:

方法1:

vector<type>   vec;                                        //定义一个vector对象;(元素的个数为空)

方法2:

vector<type>   vec(num,value);                   //定义一个vector对象,元素有num个,初值都为value;

例如:

          vector<int>      vec(10,-1);                   //定义一个vector对象,包含10个元素,每个元素的初值为-1。

          vector<string>   vec(10,"hi");             //定义一个vector对象,包含10个元素,每个元素的初始为hi。

方法3:

vector<type>  vec(num);                              //定义一个vector对象,元素有num个,初值由系统设定;

例如:

vector<int>   vec(10);                                     //定义一个vector对象,元素有10个,系统设置初值为0。

vector<string>   vec(10);                               //定义一个vector对象,元素有10个,系统设置都为空串。

方法4:

vector<type>  vec1;

vector<type>  vec2(vec1)                             //定义一个vector对象vec2,并用对象vec1来对vec2进行初始化。英文解释为:copy  elements  of  vec1   into   vec2

 

2、vector对象的基本操作:

                                                                         判空   empty

     vector<type>   vec;

     vec.empty();           //为空,返回true。不为空,返回false。

 

                                                               获取vector中成员的个数   size

    vector<type>   vec;

    vector<type>::size_type  size;

    size=vec.size();                               //获取vector中一共有多少个成员。

    (

            为了提高vector的效率,系统使用的是连续的存储空间(和数组一样)。试想,当我在插入元素时,突然发现后面的空间不可用时,系统将会开辟新的空间,并将原来的元素赋值到新的位置上,然后在后面继续添加成员。为了避免或减少这种情况的发生,在可以预见成员个数时,应该使用resize预留空间。

            而list容器使用的是不连续的存储空间。这种清空是不会出现的。

    )

    例如:

    vec.resize(1000);

    cout<<vec.size()<<endl;                           //vec预留的空间中可以存放多少个元素。

 

    vector的capacity()返回在vector不重新开辟空间之前,vector中最多可以存储多少个成员。

 

                                                               取出vector中的第n个成员     vec[n]

    vector<type>    vec;

    vec[n];

    注意::   vec[n]可以做左值,即修改vector中第n+1个元素的值,可以通过对vec[n]赋值来实现。

 

                                                               增                push_back        insert

   vector<type>    vec;

   vector<type>::value_type   value;

   vec.push_back(value);                     //在vector中的最后一个元素的后面插入value。

   插入:

   vec.insert(iter_pos,value);              //在iter_pos的位置上插入value值。

   vec.insert(iter_pos,num,value);     //在iter_pos的位置上插入num个value值。

   vec.insert(iter_pos,iter_begin,iter_end);  

  //将另外一个顺序容器,iter_begin开始到iter_end结束的元素复制到向量vec中的iter_pos位置。

                                                               删                erase      pop_back      clear

   vector<type>    vec;

   vector<type>::iterator  iter  =   vec.begin();

   while(iter != vec.end())

   {

                        iter  = vec.erase(iter);

   }

   删除vector向量的最后一个元素:

   vec.pop_back();        //删除vector向量的最后一个元素。

   清空:

   vec.clear()                    //将vec向量中的所有元素清空。

                                                              改                  对vec[n]进行赋值,修改vec中第n+1个元素的值。 

例如:

   vector<int>   vec(5,1);

    vec[1]=3;                            //将vec中的第2个元素的值修改为3

    

                                                             查                

     使用遍历的方法来查找;

     对于经常进行查找的vector,建议使用set代替vector

     set是一个只有key,没有value的map,在set中,任何一个值只能出现一次,不过在set中是使用红黑树来处理的,查找性能非常优越,而插入性能不好。

     set有find方法,而不像vector的find要指定开始位置。

     

                                                             排序                sort

    vec.sort();                           //对vec中的成员进行排序。

 

                                               

                                                              遍历             iterator   或   下标

方法1:

    vector<type>::size_type    size   =   vec.size();

    vector<type>::size_type    index;

    for(index=0;index<size;index++)

    {

                   cout << vec[index] << "   ";

    }

方法2:

     vector<type>::iterator   iter  =  vec.begin();

     while(iter !=  vec.end())

     {

               cout << *iter  << "   ";

     }

原创粉丝点击