zoukankan      html  css  js  c++  java
  • C++容器之Vector

    vector是C++标准模板库中的部分内容,它是一个多功能的,能够操作多种数据结构和算法的模板类和函数库。vector之所以被认为是一个容器,是因为它能够像容器一样存放各种类型的对象,简单地说vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。为了可以使用vector,必须在你的头文件中包含下面的代码:
    #include <vector>
    vector属于std命名域的,因此需要通过命名限定,如下完成你的代码:
    using std::vector;     vector<int> v;
    或者连在一起,使用全名:
    std::vector<int> v;
    建议使用全局的命名域方式:
    using namespace std;
    1.vector的声明
       vector<ElemType> c;               创建一个空的vector
       vector<ElemType> c1(c2);       创建一个vector c1,并用c2去初始化c1
       vector<ElemType> c(n) ;         创建一个含有n个ElemType类型数据的vector;
       vector<ElemType> c(n,elem); 创建一个含有n个ElemType类型数据的vector,并全部初始化为elem;
       c.~vector<ElemType>();      销毁所有数据,释放资源;
    2.vector容器中常用的函数。(c为一个容器对象)
        c.push_back(elem);         在容器最后位置添加一个元素elem
        c.pop_back();                   删除容器最后位置处的元素
        c.at(index);                       返回指定index位置处的元素
        c.begin();                          返回指向容器最开始位置数据的指针
        c.end();                             返回指向容器最后一个数据单元的指针+1
        c.front();                           返回容器最开始单元数据的引用
        c.back();                           返回容器最后一个数据的引用
        c.max_size();                    返回容器的最大容量
        c.size();                             返回当前容器中实际存放元素的个数
        c.capacity();                     同c.size()
        c.resize();                         重新设置vector的容量
        c.reserve();                       同c.resize()
        c.erase(p);                        删除指针p指向位置的数据,返回下指向下一个数据位置的指针(迭代器)
        c.erase(begin,end)         删除begin,end区间的数据,返回指向下一个数据位置的指针(迭代器)
        c.clear();                         清除所有数据
        c.rbegin();                      将vector反转后的开始指针返回(其实就是原来的end-1)
        c.rend();                         将vector反转后的结束指针返回(其实就是原来的begin-1)
        c.empty();                      判断容器是否为空,若为空返回true,否则返回false
        c1.swap(c2);                  交换两个容器中的数据
        c.insert(p,elem);            在指针p指向的位置插入数据elem,返回指向elem位置的指针       
        c.insert(p,n,elem);         在位置p插入n个elem数据,无返回值
        c.insert(p,begin,end)    在位置p插入在区间[begin,end)的数据,无返回值
    3.vector中的操作
        operator[] 如: c[i];
        同at()函数的作用相同,即取容器中的数据。

    在上大致讲述了vector类中所含有的函数和操作,下面继续讨论如何使用vector容器:

    1.数据的输入和删除。push_back()与pop_back()

     1 #include <cstdio>
     2 #include <vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int i,n;
     7     vector<int> v;
     8     for(i = 0 ;i < 10; i++)
     9     {
    10         scanf("%d",&n);
    11         v.push_back(n);//push_back(n)将元素添加到数组最后
    12     }
    13     for(i = 0 ; i < v.size(); i++)
    14     {
    15         printf("%d ",v[i]);
    16     }
    17     printf("
    ");
    18     v.pop_back();//pop_back()将数组最后一个元素删除
    19     for(i = 0; i < v.size(); i++)
    20     {
    21         printf("%d ",v[i]);
    22     }
    23     printf("
    ");
    24     return 0;
    25 }

    2.元素的访问

     1 #include <cstdio>
     2 #include <vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int i,n;
     7     vector<int> v;
     8     vector<int>::iterator it;//声明一个vector的迭代器
     9     for(i = 0 ; i <10; i++)
    10     {
    11         scanf("%d",&n);
    12         v.push_back(n);
    13     }
    14      
    15     for(i = 0 ; i < v.size(); i++)
    16     {
    17         printf("%d ",v[i]);//第一种方法访问,通过操作[]
    18     }
    19     printf("
    ");
    20      
    21     for(i = 0 ; i < v.size(); i++)
    22     {
    23         printf("%d ",v.at(i));//第二种方法访问,通过at(index)函数
    24     }
    25     printf("
    ");
    26     for(it = v.begin();it != v.end(); it++)
    27     {
    28         printf("%d ",*it);//第三种方法访问,通过迭代器iterator访问
    29     }
    30     printf("
    ");
    31     return 0;
    32 }

    3.排序和查询

     1 #include <cstdio>
     2 #include <algorithm>
     3 #include <vector>
     4 using namespace std;
     5 int main()
     6 {
     7     int i,n;
     8     vector<int> v;
     9     vector<int>::iterator it;//声明一个vector的迭代器
    10     for(i = 0 ; i <10; i++)
    11     {
    12         scanf("%d",&n);
    13         v.push_back(n);
    14     }
    15     it = find(v.begin(),v.end(),3);//进行查找元素3
    16     if(it == v.end())//若无该元素,则返回指向容器最后一个单元
    17     {
    18         printf("该元素不存在于容器中!
    ");
    19     }else
    20     {
    21         printf("%d
    ",it-v.begin());
    22     }
    23     sort(v.begin(),v.end());//对容器中元素进行排序
    24     reverse(v.begin(),v.end());//颠倒容器中元素顺序
    25     return 0;
    26 }

    4.二维容器

     1 #include <cstdio>
     2 #include <vector>
     3 using namespace std;
     4 int main()
     5 {
     6     int i,j;
     7     int m;
     8     vector< vector<int> > v;//注意:定义二维容易的时候,最外面两个<>处一定要有空格,否则会报错
     9     vector<int> v1;
    10     for(i = 0 ; i < 4; i++)//使用二维容器之前一定要对其进行初始化
    11     {
    12         v.push_back(v1);
    13     }
    14     for(i = 0 ; i < 4; i++)
    15     {
    16         for(j = 0 ; j < 4; j++)
    17         {
    18             scanf("%d",&m);
    19             v[i].push_back(m);
    20         }
    21     }
    22     printf("%d
    ",v.size());
    23     for(i = 0 ; i < v.size(); i++)
    24     {
    25         for(j = 0 ; j < v[i].size(); j++)
    26         {
    27             printf("%d ",v[i][j]);
    28         }
    29         printf("
    ");
    30     }
    31     return 0;
    32 }
  • 相关阅读:
    c# 深拷贝与浅拷贝
    SQLServer性能优化 .net开发菜鸟总结
    Ajax自定义无刷新控件实现
    APScheduler库的详细用法
    catkin在centos中的安装
    第五次任务实现与项目总结第六组
    Javascript教程:获取当前地址栏url
    窗口处理问题
    HTML中area标签
    Asp.net中Frameset的使用小结
  • 原文地址:https://www.cnblogs.com/heweiyou/p/4732980.html
Copyright © 2011-2022 走看看