C++容器 和迭代器

        STL容器为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型。

容器部分主要由头文件<vector>,<list>,<deque>,<set>,<map>,<stack>和<queue>组成。

向量(vector)

向量(vector容器类):头文件 #include<vector> ,vector是一种动态数组,是基本数组的类模板

迭代器:(iterator)

     包含的头文件#include<iterator>

         迭代器实际上是一种泛化指针,如果一个迭代器指向了容器中的某一成员,那迭代器将可以通过自增自减来遍历容器中的所有成员。迭代器是联系容和算法的媒介,是算法操作容器的接口。在运用算法操作容器的时候,我们常常在不知不觉中已经使用了迭代器。


顺序容器变量的初始化。

方式1:C<type>变量1=变量。   这种方法很少用。

方式2:使用构造函数                                           C可以为:vecter、list、deque

              构造函数                                                                  描述 

         C<type>V1;                                         C保存类型为type的对象,v1为空。

         C<type>V2(n)                                     v2 包含n个元素,每个元素初始化为0。

         C<type>v3(n,i)                                   v3 包含n个元素,每个元素初始化为i.

         C<type>v4(v1);                                   v4是v1的一个副本。实现的是复制的操作。

         c<sype>v5(b,e)                                  v5中包含另一个容器变量的迭代器b和e之间的元素。  


迭代器:

  格式: C<type>::iterator iter:指向容器中元素的指针。

   begin()和end()函数。

begin()返回指向容器第一个元素的迭代器。

例:vectot<init>::iterator iter=v.begin();

 end();返回指向容器最后一个元素的迭代器。

例:vector<int>::iterator iter=v.end()。

运算:

 *iter  引用迭代器指向的元素。

 iter++ 指向下一个元素

 iter- - 指向上一个元素

 iter+n 指向下n个元素(list容器不能使用)

iter-n 指向上n个元素(list容器不能使用)


大小操作:

size()返回容器中的元素个数

empty()判断容器是否为空

访问操作

back()返回容器中最后一个元素。

front()返回容器中第一个元素。

[n]返回容器中第n个元素(list容器不能使用)

交换操作 

变量.swap(c<type>b);交换容器变量a和b.



#include <iostream>

#include <vector>


using namespace std;


int main(int argc,const char * argv[])

{


    vector<int>v1;//容器

    cout<<v1.size()<<endl;//容器个数。

    vector<int>v2(10);

    for (int i=0; i<v2.size(); i++)

    {

         cout<<v2[i]<<' ';

    }

    cout<<endl;

    

    vector<int>v3(10,1);//101

    for (int i=0; i<v3.size(); i++)

    {

        cout<<v3[i]<<' ';

    }

    cout<<endl;

    

    vector<int> v4(v3);//复制。

    for (int i=0; i<v4.size(); i++)

    {

        cout<<v4[i]<< ' ';

    }

    cout<<endl;

    

    vector<int>::iterator iter=v3.begin();

    vector<int>v5(iter ,iter+3);//第一个到第三个元素。

    for (int i=0;i<v5.size(); i++)

    {

        cout<<v5[i]<<' ';

    }

    cout<<endl;

    

    //添加

    vector<int> e;

    e.push_back(10);//尾部加一个元素。

    e.push_back(20);

    

    vector<int>::iterator iter1=e.begin();

    e.insert(iter1+1,30);//在迭代器指向的元素前添加值元素。

    for (int i=0; i<e.size(); i++)

    {

        cout<<e[i]<<endl;

    }

    

    

    vector<int>v8;

    for (int i=0; i<10; i++)

    {

        v8.push_back((i+1)*10);

    }

    

    for (int i=0; i<v8.size(); i++)

    {

        cout<<v8[i]<<' ' ;

    }

    cout<<endl;

    

    iter= v8.begin();

    v8.erase(iter,iter+2);//删除指定的元素。

    for (int i=0; i<v8.size(); i++)

    {

        cout<<v8[i]<<' ';

    }

    cout<<endl;

    

    v8.pop_back();//删除最后一个元素。

    for (int i=0; i<v8.size(); i++)

    {

        cout<<v8[i]<<' ';

    }

    

    cout<<endl;

    v8.clear();//删除全部元素。

    

    cout<<v8.size()<<endl;

    

    

    

    

    return 0;

}


交换

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

    vector<int>v1;

    v1.push_back(10);

    v1.push_back(20);

    for (int i=0; i<v1.size(); i++)

    {

        cout<<v1[i]<<' ';

    }

    cout<<endl;

    

    vector<int>v2;

    v2.push_back(30);

    v2.push_back(40);

    v2.push_back(50);

    

    v1.swap(v2);//交换。

    

    for (int i=0; i<v1.size(); i++)

    {

        cout<<v1[i]<<' ';

    }

    cout<<endl;

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值