• C++ -- STL泛型编程(一)之vector


    STL提供三种组件:容器,迭代器,算法,它们都支持泛型程序设计标准容器有两类:顺序容器和关联容器。

    顺序容器(vector,list,deque,string等)是一系列元素的有序组合。

    关联容器(set,multiset,map,multimap等)包含查找元素的键值。

    迭代器的作用是遍历容器。

    库包含四类算法:排序算法,不可变序算法,变序性算法和数值算法。

    接下来介绍vector的简单用法

     1 //题意描述:用vector向量容器装入10个整数,然后使用迭代器//iterator和accumulate算法统计这10个元素的和
     2 
     3 #include<iostream>//cin和cout需要
     4 #include<vector>  //向量需要
     5 #include<numeric> //accumulate算法需要
     6 using namespace std;
     7 
     8 int main(int argc,char *argv[])
     9 {
    10     vector<int>v;//定义向量i
    11     int i;
    12     for(i=0;i<10;i++)
    13     {
    14         v.push_back(i);//尾部元素扩张方式赋值
    15     }
    16     //使用iterator迭代器顺序遍历所有元素
    17     for(vector<int>::iterator it=v.begin();it!=v.end();it++)
    18     {
    19         cout<<*it<<" ";//输出迭代器当前位置上的元素值
    20     }
    21     cout<<endl;
    22     cout<<accumulate(v.begin(),v.end(),0)<<endl;//统计输出向量所有元素的和
    23     return 0;
    24 }
    //运行结果:
      0 1 2 3 4 5 6 7 8 9
      45

      vector向量容器不但能像数组一样对元素进行随机访问,还能在尾部插入元素,是一种简单,高效的容器,完全可以代替数组。

      值得注意的是,vector具有内存自动管理的功能,对于元素的插入和删除,可动态调整所占的内存空间。

      创建vector对象常用的有三种形式:

      (1) //不指定容器的元素个数,如定义一个用来存储整型的容器vector<int>v;

      (2//定义容器的大小,如定义一个用来存储10double类型元素的向量容器

    vector<double>v(10);

      (3)//创建一个具有n个元素的向量容器对象,每个元素都具有指定的初始值

    vector<double>v(10,8.6);

        上述语句的意思是,定义了v向量容器,共有10个元素,每个元素的初始值都是8.6

     

     尾部元素扩张

    通常使用push_back()vector容器在尾部追加新的元素。尾部追加的元素,vector容器会自动分配新内存空间。可以对空的vector对象扩张,也可以对已有元素的vector对象扩张

     1 //问题描述:将2,7,9三个元素从尾部添加到v容器中。
     2 #include<iostream>
     3 #include<vector>
     4 using namespace std;
     5 
     6 int main(int argc,char *argv[])
     7 {
     8     vector<int>v;
     9     v.push_back(2);
    10     v.push_back(7);
    11     v.push_back(9);
    12 
    13     for(vector<int>::iterator it=v.begin();it!=v.end();it++)
    14         cout<<*it<<" ";
    15     cout<<endl;
    16     return 0;
    17 }
    18 
    19 //程序运行结果输出:2 7 9

     

      vector元素的删除:

      erase()方法可以删除vector中迭代器所指的一个元素或一段区间中的所有元素。

      clear()方法则一次性删除vector中的所有元素。

     1 #include<iostream>
     2 #include<vector>
     3 using namespace std;
     4 
     5 int main(int argc,char *argv[])
     6 {
     7     vector<int>v(10);
     8     vector<int>::iterator it;
     9 
    10     for(int i=0;i<10;i++)
    11         v[i]=i; //下标方法
    12  
    13     for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
    14         cout<<*it<<" ";
    15     cout<<endl;
    16  
    17     v.erase(v.begin()+2);    //删除第二个元素,从0开始计数
    18 
    19     for(it=v.begin();it!=v.end();it++) //输出当前迭代器上的元素值
    20         cout<<*it<<" ";
    21     cout<<endl;
    22 
    23     //删除迭代器第1到第5区间的所有元素
    24     v.erase(v.begin()+1,v.begin()+5); 
    25     for(it=v.begin();it!=v.end();it++)  //输出当前迭代器上的元素值
    26         cout<<*it<<" ";
    27     cout<<endl;
    28 
    29     v.clear();   //清空向量
    30 
    31     cout<<v.size()<<endl;     //输出向量的大小
    32    return 0;
    33 }
    34 
    35 /*
    36   运行结果:
    37   0 1 2 3 4 5 6 7 8 9
    38   0 1 3 4 5 6 7 8 9
    39   0 6 7 8 9
    40   0
    41 */ 
  • 相关阅读:
    LintCode Python 简单级题目 41.最大子数组
    helm深入学习
    kubernetes组件helm
    解压war包
    linux打开进程数测试
    docker使用centos7系统构建oraclejdk镜像
    docker使用centos7系统构建tomcat镜像
    docker使用alpine系统构建tomcat镜像
    docker制作共享jdk的tomcat镜像
    java cpu使用率高异常排查
  • 原文地址:https://www.cnblogs.com/lmei/p/3265506.html
Copyright © 2020-2023  润新知