首页 > 编程语言 >C++语言vector容器介绍和示例

C++语言vector容器介绍和示例

时间:2022-11-22 23:05:33浏览次数:39  
标签:容器 函数 示例 元素 C++ vector 存放 string


 

       之前我们在声明数组的时候,采用的是datatype  array[len]的形式,数组在分配之后,不能调整大小,删除和插入数据时操作十分的繁琐,虽然可以采用链表,但是链表的操作更麻烦,我喜欢简单的方法。

       与string类一样, 向量vector 同属于STL(Standard Template Library, 标准模板库)中的自定义的类, vector是一个封装了动态数组的顺序容器(Sequence Container)。跟其它类型的容器一样,它能够存放各种类型的数据和对象。可以简单的认为,vector容器是一个能够存放任意类型的动态数组。

       与数组相比,vector 容器的优点在于它能够根据需要自动调整的大小,随时放入更多的元素。此外, vector 也提供了许多的成员函数来对自身进行操作。

容器的定义

       首先,如果要在程序中使用vector容器,必须包含头文件 <vector>。如下:

              #include <vector>

       vector类是一个模板类,位于std命名空间内,为方便使用还需要增加:

              using namespace std;

       声明一个容器很简单:

              vector<int> vi;              // 定义用于存放整数的容器

              vector<double> vd;         // 定义用于存放浮点数的容器

              vector<string> vs;           // 定义用于存放string字符串的容器

              vector<struct st_girl> vgirl;  // 定义用于存放超女结构体的容器

              vector<CGirl> vGirl;         // 定义用于存放超女类的容器

       vector容器很牛,有多牛?要多牛有多牛,可以存放很多头牛。

       vector容器可以存放C语言的基本数据类型,可以存放结构体,还可以存放类,这正是我们想要的简单的方法,至于链表,我已经有二十年没有用它了。

容器的使用

       vector的功能强大,成员函数很多,我不想按普通教程的方式来介绍它,那样会太烦锁,我回忆了二十年来的实际应用场景,采用示例程序介绍vector常用的用法。

1、存放整数

       示例(book220.cpp)

      

C++语言vector容器介绍和示例_vector容器

       运行结果

      

C++语言vector容器介绍和示例_vector容器_02

 

程序解释如下:

       std::vector<int> vheight;   // 声明容器用于存放整数,超女身高,单位是cm。

       void push_back(const T& x)成员函数:向容器尾部增加一个元素x,x就是你要向容器中增加的变量,在本示例中是一个整数,注意,参数x是一个引用,要用变量的名称,不是变量的地址,如vheight.push_back(height);。

       int size()成员函数:返回容器中数据的元素总数。

       像数组一样访问容器:容器像数组一样,可以用数组的下标访问,vheight[0]表示容器的第1个元素,vheight[n]表示容器的第n+1个元素。注意,采用下标方式放问容器的时候,下标不要越界,否则可能会引起内存溢出。

       iterator begin()成员函数:返回容器头指针,指向第一个元素。

       iterator end()成员函数:返回容器尾指针,指向容器最后一个元素的下一个位置。

       容器中的元素排序:采用sort()函数对容器中的元素进行排序。如sort(vheight.begin(),vheight.end());表示对容器中全部的元素进行排序。

       void clear():清空容器中的全部元素,注意两点:1)容器被声明的时候,本来就是空的;2)容器是类,有析构函数,析构函数中会自动清空容器中的元素,释放内存资源,不需要程序员担心。但是,程序员也可以调clear()函数手工清空容器中的元素。

       示例book220.cpp程序展示了vector容器10%的功能和成员函数,但是,在实际开发中,对容器的操作,95%的内容就是这些。

2、存放字符串

       示例(book222.cpp)

      

C++语言vector容器介绍和示例_C语言_03

       运行结果

      

C++语言vector容器介绍和示例_C++语言_04

       注意几个问题:

      1)用容器存放字符串,数据类型用string,不是C语言用0结尾的字符数组char []。

      2)用vname.push_back()成员函数把数据追加到容器中,参数的类型可以是string,也可以是char[],但是,这并不是vector的特征,而是string的特征,容器声明的是string类型,string的构造函数支持char [],表面上看push_back()进去的是char [],实际上会被转换为string。

      3)对string和结构体等的排序,在以后的章节中会详细介绍。

3、存放结构体

       示例(book225.cpp)

      

C++语言vector容器介绍和示例_C语言_05

       运行结果

       

C++语言vector容器介绍和示例_vector容器_06

       总的来说,存放结构体的容器和数组的用法基本相同。

       在book225.cpp中,采用了memcpy函数,它是C语言的库函数,用于内存中的数据复制,声明如下:

              void *memcpy(void *dest, const void *src, size_t n);

       dest -- 指向用于存储复制内容的目标地址,类型强制转换为 void* 指针。

       src -- 指向要复制的数据源地址,类型强制转换为 void* 指针。

       n -- 要被复制的字节数。

       该函数返回dest。

4、存放类

       在第2节存放字符串中,string就是类。

       vector容器可以存放类,但是在实际开发中,除了存放string类,很少用vector存放其它的类。

其它成员函数

       vector的成员函数比较多,为了不增加各位的学习负担,我介绍一些可能有用的。

1、定位的函数

       iterator begin():返回容器头的指针,指向容器第一个元素的位置。

       iterator end():返回容器尾的指针,指向容器最后一个元素的下一个位置。

       iterator是跌代器,这个名字让人难以理解,大家不要管它,以下我会举例说明用法,一般来说,begin()和end()成员函数会用在其它成员函数的参数中。

2、增加元素的函数

       void push_back(const T& x):向容器的尾部增加一个元素x。

       iterator insert(iterator it,const T& x):向容器中指定位置(it)前插入一个元素x。

       示例:

       strcpy(stgirl.name,"王昭群"); stgirl.age=22;

       vgirl.insert(vgirl.begin()+1,stgirl);  // 在第2个元素前插入一个元素。

3、删除元素的函数

       iterator erase(iterator it):删除容器中指定位置(it)的元素。

       示例:

       vgirl.erase(vgirl.begin()+2);  // 删除容器中第3个元素。

       void pop_back():删除容器中最后一个元素。

       void clear():清空容器中全部的元素。

4、判断容器的大小

       bool empty():判断容器是否为空。

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

 

版权声明

作者:码农有道

如果文章有错别字,或者内容有误,或其他的建议或意见,请您留言指正,非常感谢!!!

 

标签:容器,函数,示例,元素,C++,vector,存放,string
From: https://blog.51cto.com/u_13748800/5878702

相关文章

  • C++语言类的详解和示例
     超女选秀的例子我们玩了很久,为了教学的需要,暂时离开美眉们,我将采用实际项目开发的例子。在C语言基础知识中已学习过文件操作,在实际开发中,我会把文件操作封装成一个类,类的......
  • C++语言引用的介绍和示例
         对于习惯使用C进行开发的程序员来说,在看到C++中出现的&符号,可能会犯迷糊,因为在C语言中这个符号表示了取地址符,但是在C++中,它除了取地址,还有其它的用途,叫做引用......
  • C++语言string类介绍和示例
    在C语言中,用0结尾的字符数组表示字符串,C的字符串有一个问题,就是定义后大小不能改变,存入的内容只能比数组小,不能大,如果不小心存多了,会引起内存的溢出,这个问题让程序员很郁闷......
  • C++语言类和对象介绍和示例
     C++类和对象C语言中结构体(struct)是一种构造类型,可以包含若干成员变量,可以通过结构体来定义结构体变量。C++中的类(class)可以看成结构体的升级版,类也是一种构造类型,但是进......
  • C++语言函数重载详解和示例
     C++函数重载的概念在实际开发中,有时候我们需要实现几个功能类似的函数,只是有些细节不同。例如把变量的值写入文件,变量的类型int、long、double、char,需要通过参数把变量......
  • 从C语言到C++语言
      ​​C++​​​ 读作“C加加”,是“CPlusPlus”的简称。顾名思义,C++是在​​C语言​​的基础上增加新特性。从语法上看,C语言是C++的一部分,C语言代码几乎不用修改就......
  • C/C++语言学习的策略
    断章取义C语言出现50年了,有很多内容已过时,至少有百分之二十的内容没有实用价值。C++更过份,对程序员来说,至少有百分之七十的内容没有实用价值。Linux系统也是,命令上千个,对程......
  • C/C++程序员如何学习英语
       英语是程序员的重要技能,有多重要?比较重要,极其重要吗?也不一定。    我是高中毕业,在刚开始学习计算机的一两年,曾经买过许国璋英语四级和计算机英文方面的书籍......
  • C++学习笔记--引用与返回值
    //#include<iostream>//usingnamespacestd;////int&fun()//注意类型要保持一致//{// inta=12;//不能引用局部变量// returna;//}////intmain()//{// in......
  • C++学习笔记——交换
    //#include<iostream>//usingnamespacestd;//voidswap(int&a1,int&b1)//该情况下,将主函数中的a和b分别传递给了a1和b1,在引用的作用下,a和a1,b和b1分别共用一个空间,......