zoukankan      html  css  js  c++  java
  • 标准模板库使用参考——vector向量容器

      C++的STL从广义上讲分为algorithm(算法),container(容器)和iterator(迭代器)三类,包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。

      在C++标准库中,STL被组织成为下面的13个头文件:<algorithm>, <deque>, <functional>, <iterator>, <vector>, <list>, <map>, <memory>, <numeric>, <queue>, <set>, <stack>和 <utility>

    1,vector向量容器

      vector是一种简单高效的容器,在尾端插入何删除元素,算法时间复杂度为O(1),其他元素插入和删除为O(n)。vector可动态调整所占用的内存空间。

    用数组方式访问vector元素的参考代码如下图所示:

    #include<iostream>
    #include<cstdio>
    #include<vector>
    using namespace std;
    
    int main()
    {
        vector<int> v;
        v.push_back(20);    //尾端插入新元素
        v.push_back(26);
        v.push_back(12);
    
        for(int i = 0; i < v.size(); i++)
            cout<<v[i]<<' ';
    
        getchar();
    
        return 0;
    }

    运行结果

    #include<iostream>
    #include<cstdio>
    #include<vector>
    
    using namespace std;
    
    int main()
    {
        int j;
    
        vector<int> v;
    
        v.push_back(0);                          //尾端插入新元素
        v.push_back(1);
        //v.clear();                             //全部清空元素
        v.push_back(2);
        v.insert(v.begin()+2, 9);                //插入9在第二个后面
        v.insert(v.begin(), 5);                  //插入5为首元素
        v.insert(v.end(), 12);                   //插入12为末元素
        v.erase(v.begin()+1);                    //删除第二个元素
        v.erase(v.begin(), v.begin()+2);         //删除前三个元素
    
        vector<int>::iterator i;                 //迭代器相当于游标
    
        for(i = v.begin(), j = 0; i != v.end(); i++, j++)
            cout<<"v["<<j<<"]="<<*i<<endl;
    
        swap(v[1], v[2]);
    
        for(i = v.begin(), j = 0; i != v.end(); i++, j++)
            cout<<"v["<<j<<"]="<<*i<<endl;
    
        cout<<v.empty()<<endl;                 //判断是否为空
        cout<<v.size()<<endl;                  //元素实际个数
        cout<<v.max_size()<<endl;              //可容纳的最大元素个数
        cout<<v.capacity()<<endl;              //当前可容纳的vector元素个数
        cout<<v.front()<<endl;                 //首元素引用
        cout<<v.back()<<endl;                  //末尾元素引用
        v.pop_back();                           //删除末尾元素
    
        v.reserve(30);                          //调整数据空间大小
        cout<<v.capacity()<<endl;
    
        vector<int>::reverse_iterator ri;       //反响迭代器
        for(ri = v.rbegin(); ri != v.rend(); ri++)      //首尾反向
            cout<<*ri<<" ";
    
        getchar();
    
        return 0;
    }

    运行结果

     结构体容器参考代码如下

    #include<iostream>
    #include<cstdio>
    #include<vector>
    
    using namespace std;
    
    struct stu
    {
        int x;
        int y;
    };
    
    int main()
    {
        int j;
        vector<stu> v1;     //结构体容器
        vector<stu> v2;
    
        struct stu a = {1, 2};
        struct stu b = {2, 3};
        struct stu c = {4, 5};
    
        v1.push_back(a);
        v1.push_back(b);
        v1.push_back(c);
        v2.push_back(c);
        v2.push_back(b);
        v2.push_back(a);
    
        cout<<"v1:
    ";
    
        for( int i = 0; i < v1.size(); i++)
            cout<<v1[i].x<<" "<<v1[i].y<<endl;
    
        cout<<"v2:
    ";
    
        for(int i = 0; i < v2.size(); i++)
            cout<<v2[i].x<<" "<<v2[i].y<<endl;
    
        swap(v1, v2);
    
        cout<<"v1:
    ";
    
        for(int i = 0; i <v1.size(); i++)
            cout<<v1[i].x<<" "<<v1[i].y<<endl;
    
        cout<<"v2:
    ";
    
        for(int i = 0; i < v2.size(); i++)
            cout<<v2[i].x<<" "<<v2[i].y<<endl;
    
        getchar();
    
        return 0;
    }

    运行结果:

    永远渴望,大智若愚(stay hungry, stay foolish)
  • 相关阅读:
    ARTS 计划第四周
    ARTS 计划第三周周
    计划表的科学设定
    C/C++内存分配
    ARTS 计划第二周周
    jsoncpp 和 libcurl的编译与使用 vs2010
    ARTS 计划第一周
    unix中的v节点和i节点
    百度地图demo
    带有定位当前位置的百度地图web api 前端代码
  • 原文地址:https://www.cnblogs.com/h-hkai/p/8214636.html
Copyright © 2011-2022 走看看