所在的位置: C++ >> C++前景 >> C编程语言C的vector容

C编程语言C的vector容

北京白癜风到哪里治 https://m.39.net/pf/bdfyy/tslf/

1.vector容器基本概念

功能:

    vector数据结构和数组非常相似,也称为单端数组

vector与普通数组区别:

    不同之处在于数组是静态空间,而vector可以动态扩展

动态扩展:

    并不是在原空间之后续接新空间,而是找更大的内存空间,然后将原数据拷贝到新空间,释放原空间

vector容器的迭代器是支持随机访问的迭代器

2.vector构造函数

功能描述:

    创建vector容器

/*函数原型vectorTv;采用模板实现类实现,默认构造函数vector(v.begin(),v.end())将v[begin(),end()]区间中的元素拷贝给本身vector(n,elem)构造函数将n个elem拷贝给本身vector(constvectorvec)拷贝构造函数*///vector的打印函数voidprintVector(vectorintv){for(vectorint::iteratorit=v.begin();it!=v.end();it++){cout*it;}coutendl;}voidtest01(){vectorintv1;//默认构造无参构造for(inti=0;i10;i++){v1.push_back(i);}printVector(v1);//输出//通过区间方式进行构造vectorintv2(v1.begin(),v1.end());printVector(v2);//输出//n个elem方式构造vectorintv(10,);printVector(v);//输出//拷贝构造vectorintv4(v);printVector(v4);//输出}intmain(){test01();system("pause");return0;}.Vector赋值操作

功能描述:

      给vector容器赋值

/*函数原型vectoroperator(constvectorvec)重载等号操作符assign(beg,end)将[begend]区间中的数据拷贝赋值给本身assign(n,elem)将n个elem拷贝赋值给本身*///vector的打印函数voidprintVector(vectorintv){for(vectorint::iteratorit=v.begin();it!=v.end();it++){cout*it"";}coutendl;}voidtest01(){vectorintv1;for(inti=0;i10;i++){v1.push_back(i);}printVector(v1);//输出//赋值操作//1.operator=vectorintv2;v2=v1;printVector(v2);//输出//2.assignvectorintv;v.assign(v1.begin(),v1.end());printVector(v);//输出vectorintv4;v4.assign(5,);printVector(v4);//输出}intmain(){test01();system("pause");return0;}4.vector容量判断和大小改变

功能描述:

    对vector容器的容量和大小操作

/*函数原型empty()判断容器是否为空capacity()容器的容量size()返回容器中元素个数resize不改变容量大小,只改变容器内元素数多少resize(intnum)重新指定容器的长度num若容器变长,则以默认值填充新位置若容器变短,则末尾超出容器长度的元素被删除resize(intnum,elem)重新指定容器的长度为num,若容器变长,则以elem值填充新位置若容器变短,则末尾超出容器长度的元素被删除*///vector的打印函数voidprintVector(vectorintv){for(vectorint::iteratorit=v.begin();it!=v.end();it++){cout*it"";}coutendl;}voidtest01(){vectorintv1;for(inti=0;i10;i++){v1.push_back(i);}printVector(v1);//输出//判断vector容器是否为空if(v1.empty()){//为真代表容器为空cout"v1为空"endl;}else{cout"v1不为空"endl;cout"v1的容量为"v1.capacity()endl;cout"v1容器内元素数为"v1.size()endl;}//重新指定容器长度v1.resize(15);//若容器变长,则以默认值0填充新位置v1.resize(15,);//若容器变长,则以默认值填充新位置默认值可以自己指定v1.resize(5);//若容器变短,则末尾超出容器长度的元素被删除}intmain(){test01();system("pause");return0;}5.vector插入和删除

功能描述:

    对vector容器进行插入,删除操作

/*函数原型push_back(ele)尾部插入元素elepop_back()删除最后一个元素insert(const_iteratorpos,ele)迭代器指向位置pos插入元素eleinsert(const_iteratorpos,intcount,ele)迭代器指定位置pos插入n个元素eleerase(const_iteratorpos)删除迭代器指向的元素erase(const_iteratorstart,const_iteratorend)删除迭代器从start到end之间的元素clear()删除容器中所有元素*///vector的打印函数voidprintVector(vectorintv){for(vectorint::iteratorit=v.begin();it!=v.end();it++){cout*it"";}coutendl;}voidtest01(){vectorintv1;for(inti=0;i10;i++){//尾插v1.push_back(i);}//遍历printVector(v1);//输出//尾删v1.pop_back();printVector(v1);//输出//插入v1.insert(v1.begin()+2,);//提供头部迭代器,相当于在头部向后查两个插入printVector(v1);//输出v1.insert(v1.begin(),2,5);printVector(v1);//输出55//删除参数也是迭代器v1.erase(v1.begin());//删除开头,同时也可以指定任意位置printVector(v1);//输出5}intmain(){test01();system("pause");return0;}6.vector数据存取

  功能描述:

        对vector中的数据的存取操作

/*函数原型at(intidx)返回索引idx所指的数据operator[]返回索引idx所指的数据利用[]访问front()返回容器中第一个数据元素back()返回容器中最后一个数据元素*/voidtest01(){vectorintv1;for(inti=0;i10;i++){v1.push_back(i);}for(inti=0;iv1.size();i++){//利用[]方式访问数组中的元素coutv1[i]"";}coutendl;for(inti=0;iv1.size();i++){//利用at方式访问数组中的元素coutv1.at(i)"";}coutendl;//获取第一个元素coutv1.front()endl;//获取最后一个元素coutv1.back()endl;}intmain(){test01();system("pause");return0;}7.vector互换容器

功能描述:

      实现两个容器元素进行互换

/*函数原型swap(vec)//将vec与本身的元素互换*///vector的打印函数voidprintVector(vectorintv){for(vectorint::iteratorit=v.begin();it!=v.end();it++){cout*it"";}coutendl;}voidtest01(){//交换前vectorintv1;for(inti=0;i10;i++){v1.push_back(i);}printVector(v1);vectorintv2;for(inti=10;i0;i--){v2.push_back(i);}printVector(v2);//交换后v2.swap(v1);printVector(v1);printVector(v2);//实际用途//巧用swap可以收缩内存空间vectorintv;for(inti=0;i0;i++){v.push_back(i);}cout"v的容量为:"v.capacity()endl;//cout"v容器内元素多少:"v.size()endl;//0v.resize();//重新指定大小cout"v的容量为:"v.capacity()endl;//cout"v容器内元素多少:"v.size()endl;////巧用swap收内存vectorint(v).swap(v);/*vectorint(v)是调用vector拷贝函数创建的一个匿名对象,因为拷贝的是v其容量大小为然后再使用swap函数交换内存空间,v和匿名对象交换容量空间,此时v的容量就从0变为了匿名对象会被系统自动释放*/}intmain(){test01();system("pause");return0;}8.vector预留空间

功能描述:

      减少vector在动态扩展时的扩展次数

/*函数原型reserve(intlen)容器预留len个元素长度,预留位置不初始化,元素不可访问*///vector的打印函数voidprintVector(vectorintv){for(vectorint::iteratorit=v.begin();it!=v.end();it++){cout*it"";}coutendl;}voidtest01(){vectorintv;intcount=0;//用于统计内存扩展次数int*p=NULL;for(inti=0;i0;i++){v.push_back(i);if(p!=v[0]){//指针指向vector的首位,如果不指向vector的首位,就代表已经扩展内存了p=v[0];count++;}}coutcountendl;//如果没有预留空间24次v.reserve(0);//利用reserve预留空间就可以避免vector的多次内存扩展//把这个放到循环前面,这样count就为0}intmain(){test01();system("pause");return0;}




转载请注明:http://www.aierlanlan.com/cyrz/6989.html

  • 上一篇文章:
  •   
  • 下一篇文章: