C++中vector容器所包含的一些方法

vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。使用vector 需要在头文件中增加 #include <vector>

vector其实是一个模板,我们在使用时必须指定元素的类型,如声明一个int类型的vector,

vector<int> test; //声明一个int类型的vector叫test。

vector初始化:

  vector<int> test(10,-1); // test初始化为含有10个元素值为-1的vector容器。

  或  vector<int>  test={1,2,3,4};  //test含有元素为1,2,3,4这4个元素,这是c++新的标准,有的编译器可能不支持。

如何动态的添加元素到vector中呢?

1. push_back()  //  使用vector中的成员函数push_back()可以往vector中添加函数。长度不限。

可以通过下标修改、访问指定位置的元素,如test[2]访问vector中的第3个元素,与数组类似。

通过迭代器访问修改vector中的元素,如

        vector<int>::iterator it;

        for(it=test.begin();it!=test.end();it++)     //vector中的begin()成员函数获得第一个元素,end()获得最后一个函数。

             cout<<*it<<"   ";    //  输出vector中的所有元素。  这里也可以修改元素的值 如 *it=10,将元素的值改为10;

2. at(int index)  // 获得指定下标的元素。  

3. size()  // 获得vector的元素的个数。

4. empty()  // 判断vector是否为空,为空返回true。

5. erase()   // 从指定容器删除指定位置的元素或某段范围内的元素,指向的是删除元素的下一个元素。返回值是一个迭代器.

  特别注意:

  如vector中有: 3  10  10  6  9  15

一一遍历容器找到元素值为10,然后一一删除

  1. for(Iter = v1.begin(); Iter != v1.end(); Iter++) 
  2.   if(*Iter == 10) 
  3.   { 
  4.       v1.erase(Iter); //这里可能会出现错误(当调用erase()后Iter迭代器就失效了,变成了一野指针。)最好还是采用下面修改后的方式,
  5.   } 
  6. }
修改后的代码为:

  1. for(Iter = v1.begin(); Iter != v1.end(); Iter++) 
  2.   if(*Iter == 10) 
  3.   { 
  4.    Iter = v1.erase(Iter);//Iter为删除元素的下一个元素的迭代器
  5.   }
最后vector中的元素为:3  10  6  9   15

注意:这里只删除了一个10,原因是erase函数返回的是删除元素的下一个元素,然后这后面还有Iter++,所以就跳过了后面那个10.

  

 clear()     // 移除容器中所有数据。

pop_back()       // 删除最后一个数据。

insert(pos,elem)    // 在pos位置插入一个elem拷贝,传回新数据位置。

c1.swap(c2)
swap(c1,c2)        // 将c1和c2元素互换。

vector提供了erase(),pop_back(),clear()来删除数据。


温馨提示: 对于list删除元素可以使用remove方法。

例子如下:  

   list<int> a;  

    a.push_back(1);  
    a.push_back(6);  
    a.push_back(3);  
    a.push_back(6);  
    a.push_back(6);  
    a.push_back(2);  
  
    list<int>::iterator itor;  
    a.remove(6);
    for(itor=a.begin();itor!=a.end();itor++)
cout<<*itor<<"  ";

显示结果为:1  3  2。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章