标准模板库使用参考——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:\n";

    for( int i = 0; i < v1.size(); i++)
        cout<<v1[i].x<<" "<<v1[i].y<<endl;

    cout<<"v2:\n";

    for(int i = 0; i < v2.size(); i++)
        cout<<v2[i].x<<" "<<v2[i].y<<endl;

    swap(v1, v2);

    cout<<"v1:\n";

    for(int i = 0; i <v1.size(); i++)
        cout<<v1[i].x<<" "<<v1[i].y<<endl;

    cout<<"v2:\n";

    for(int i = 0; i < v2.size(); i++)
        cout<<v2[i].x<<" "<<v2[i].y<<endl;

    getchar();

    return 0;
}

运行结果:

 

posted @ 2018-01-06 16:45  Veritas_des_Liberty  阅读(351)  评论(0编辑  收藏  举报