当前位置: 首页 > news >正文

平面设计好的网站外链吧官网

平面设计好的网站,外链吧官网,网站 模板 安装,青海格尔木建设局网站作者#xff1a;良知犹存转载授权以及围观#xff1a;欢迎添加微信公众号#xff1a;羽林君前言今天继续肝C#xff0c;一入C深似海。越学越有意思。今天给大家带来一篇cvector的介绍#xff0c;难以置信这篇文章写了我三天#xff0c;不过总算整理完毕#xff0c;现在分… 作者良知犹存转载授权以及围观欢迎添加微信公众号羽林君前言    今天继续肝C一入C深似海。越学越有意思。今天给大家带来一篇cvector的介绍难以置信这篇文章写了我三天不过总算整理完毕现在分享给大家。        模板类vector 和 array是数组的替代品。模板类vector 类似于string类也是一种动态数组。 在 c 中vector 是一个十分有用的容器。它能够像容器一样存放各种类型的对象简单地说vector是一个能够存放任意类型的动态数组能够增加和压缩数据。    在C primer plus 这本书中关于vectir不是进行一次性介绍的而是分别在不同板块使用vctor而去介绍的今天我就融合起来介绍一些vector的使用。vector做一个模板类    C语言既有类模板也有函数模板其中vector是一个类模板。只有对C有一定深入的理解才能写出模板。    模板本身不是类或是函数相反可以将模板看作编译器生成类或函数编写的一份说明。编译器根据模板创建类或函数的过程叫做实例化当使用模板时需要指出编译器应把类或者函数实例化成何种类型。    对于类模板来说我们通过提供一些额外的信息来指定模板到底实例化成什么样的类需要提供哪些信息由模板决定。而提供信息的方式如下所示即在模板名字后面跟一对尖括号在括号上面放上信息。以vector为例子vectorint ivec; //ivec保存int类型的对象vector Sales_vec;//保存Sales_item类型的对象vectorvectorstring file; //一个二维数组该元素的vector对象    上面的例子中编译器根据模板vector生成了三种不同的类型vectorvector和vector。vector是模板而非类型由vector生成的类型必须包含vector中的元素类型例如vectorint就是vector元素的类型。vector能容纳大部分类型的对象作为参数但是因为引用不是对象所以不存在包含引用的vector。vector int //是错误的定义和初始化vector类型vector v1; //v1是一个空vector它潜在的元素是T类型的执行默认初始化vector v2(v1); //v2中包含有v1所有元素的副本vector v2  v1;//等价于v2(v1)v2中包含有v1所有元素的副本vector v3(n,val);//v3包含了n个重复的元素每个元素的初始值都是valvector v4(n); //v4包含了n个重复执行了值初始化的对象vector v5{a,b,c...};//v5包含了初始值个数的元素每个元素被赋予相应的初始值vector v5{a,b,c...};//等价于 v5{a,b,c...};    看到第一个初始化例子初始化了一个空vector看上去空vector好像没什么用处。但是别忘了vector是一个数组在程序运行中我们是可以很高效的往vector对象中添加元素。事实上vector最常用方式就是先定义一个空vector然后当运行时获取到元素再逐一添加。        当然也可以在定义vector对象时指定元素的初始值。例如允许一个vector对象的元素拷贝给另一个vector对象。此时新vector对象的元素就是原vector对象对应的副本。注意两个vector对象的类型必须相同。vector ivec; //初始状态为空vector ivec2(ivec); //把ivec的值拷贝给ivec2vector ivec3  ivec; //把ivec的元素拷贝给ivec3vector svec(ivec2); //错误svec的元素时string对象不是int列表初始化vector对象    列表初始化即使用花括号括起来的0个或多个初始元素值被赋给vector对象vectorstring article    {a,an,the}vectorstring article1  (a,an,the)//错误 不能放置于圆括号内创建指定数量的元素:    还可以用vector对象容纳的元素数量和所有元素的统一初始值来初始化vector对象vectorint ivec(10,-1); //10个int类型的元素每个都被初始化为-1vectorstring svec(10,hi!);//10个sting类型的元素每个都被初始化为hi!vector迭代器功能    要访问顺序容器和关联容器中的元素需要通过“迭代器(iterator)”进行。迭代器是一个变量相当于容器和操纵容器的算法之间的中介。迭代器可以指向容器中的某个元素通过迭代器就可以读写它指向的元素。从这一点上看迭代器和指针类似。    不过和指针不一样的是获取迭代器不是使用取地址符有迭代器的类型同时返回迭代器的成员。比如这些类型都拥有名为begin和end的成员其中begin负责返回指向第一个元素的迭代器auto b v.begin(), c v.end(); //b表示v的第一个元素 c表示v尾元素的下一个位置end成员则负责返回指向容器尾元素的下一个位置的迭代器。这样的迭代器 指示的是容器的一个不存在的尾后元素。*iter //返回迭代器iter所指元素的应用iter-mem //解应用iter并获取该元素名为mem的成员等价于(*iter).memiter //令iter指向容器中的下一个元素--iter //令iter指向容器的上一个元素举例子依次输出text的每一行直至遇到第一个空白行为止for(auto it text.cbegin(); it ! text.cend() !it-empty();it) count *it endl注cbegin()和cend()是C11新增的它们返回一个const的迭代器不能用于修改元素。vector当作容器    一个容器就是一些特定类型对象的集合。顺序容器类型有vector(可变大小数组支持快速随机访问在尾部之外的位置插入或删除元素可能很慢)、deque(双端队列支持快速随机访问在头尾插入/删除元素很快)、list(双向列表只支持双向顺序访问在list中任何位置进行插入/删除操作速度都很快)、forward_list(单向列表只支持单向顺序访问在列表中任何位置进行插入/删除操作速度都很快)、array(固定大小数组支持快速随机访问不能添加或删除元素)、string(与vector类似的容器但专门用于保存字符随机访问快在尾部插入/删除速度快)。向vector对象中添加元素    对vector对象来说直接初始化的方式适用于三种情况初始值已知且数量较少、初始值是另一个vector对象的副本、所有元素的初始值都一样。然后更常见的情况是创建一个vector对象时并不清楚实际所许需要的元素个数元素的值也无法确定。还有些时候即使元素的初值已知但如果这些值的总量较大且各不相同那么在创建vector对象的时候执行初始化操作也会显得过于繁琐。    举个例子如果想创建一个vector对象令其包含从0到9共10个元素使用列表初始化的方法很容易做到这一点但如果vector对象所包含的元素是从0到99或者0到999呢这时候通过列表初始化把所有元素都一一罗列出来就不太合适了。对于此例来说更好的处理方法是先创建一个空的vector然后在运行时再利用vector的成员函数push_back向其中添加元素。push_back负责把一个值当成vector对象的尾元素压到(push)vector对象的尾端(back)例如string word;vectorstring text;//空vector对象while(cinword)//cinword  是对word 进行赋值{    text.push_back(word);//把word添加到text后面 }    在这上面有进一步优化的空间就是使用emplace_back(顺序容器(如vector、deque、list)新标准引入了三个新成员emplace_front、emplace和emplace_back这些操作构造而不是拷贝元素。这些操作分别对应push_front、insert和push_back允许我们将元素放置在容器头部、一个指定位置之前或容器尾部。)    在容器尾部添加一个元素这个元素原地构造不需要触发拷贝构造和转移构造。而且调用形式更加简洁直接根据参数初始化临时对象的成员。    当调用push或insert成员函数时我们将元素类型的对象传递给它们这些对象被拷贝到容器中。而当我们调用一个emplace成员函数时则是将参数传递给元素类型的构造函数。emplace成员使用这些参数在容器管理的内存空间中直接构造元素。    emplace_back在引入右值引用转移构造函数转移复制运算符之前通常使用push_back()向容器中加入一个右值元素(临时对象)的时候首先会调用构造函数构造这个临时对象然后需要调用拷贝构造函数将这个临时对象放入容器中。原来的临时变量释放。这样造成的问题是临时变量申请的资源就浪费。所以现在我们可以用emplace_back替换push_back使用上面例子就可以这么表示text.emplace_back(word);//把word添加到text后面其他的vector操作v.empty() //v.size()v[n] //返回v中第n个位置上的元素引用不能用下标形式添加元素v[idex] a; //错误此外还有好多vector属于容器的操作大家可以参考容器使用的函数都是一样的具体使用另一位朋友写的很详细我就不多做赘述了大家可以去看看《vector容器》v.capacity();//容器的容量v.size();//返回容器中的元素个数v.resize(int num);//重新指定容器的长度为num,若容器变长则以默认值填充新位置如果容器变短则末尾超出容器长度的元素被删除v.resize(int num, eles);v.insert(const_iterator pos,ele);//迭代器指向位置pos插入元素elsv.erase(const_iterator pos);//删除迭代器指向的元素v.erase(const_iterator start,const_iteartor end);//删除迭代器从start到end之间的元素v.clear();//删除容器中所有元素 vector当作参数    在C里很多时候我们会遇到函数想返回两个以上结果的情况这时候可以用数组(vector)、类来作为容器返回也可以声明一个全局变量的数组将数值存放在数组里解决。使用引用来解决将vector的引用在函数间传递这是一个例子假设我要传入一个数我的函数的功能是返回这个数后面十个数的序列。#include#includeusing namespace std;/*输入一个数返回这个数后面的十个数字序列注意参数的这个 符号不能省略*/ void getSequence(int num,vectorint sequence){ for(int i0;i10;i){ sequence.push_back(inum); }}int main(){ int num9; vectorint sequence; //在主调函数这边直接传入该vector变量 getSequence(num,sequence); //访问该vector的值的时候也是直接访问即可 for(vectorint::iterator itsequence.begin();it!sequence.end();it){ coutendl; }}使用vector注意事项1、如果你要表示的向量长度较长(需要为向量内部保存很多数)容易导致内存泄漏而且效率会很低2、Vector 作为函数的参数或者返回值时需要注意它的写法double Distance(vectorinta,vectorintb) 其中的“”绝对不能少文件处理和vector应用    主要是尝试在文件中记录和读取信息中间用到了vectorC导出excel表格的过程太过繁琐所以这里直接用很简单的方法导出一个.csv的文本文件该文件也可用excel打开。#include#include#include // 文件流#include#include using namespace std; int main(){ //写文件 ofstream outFile; outFile.open(data.csv, ios::out); outFile name , age , hobby endl; outFile Mike , 18 , paiting endl; outFile Tom , 25 , football endl;   outFile.close(); //写文件 ifstream inFile(data.csv, ios::in); string lineStr; vector vectorstring strArray; //vector 类型文string while(getline(inFile, lineStr)) // 从 inFile 中读取一行放到 lineStr 中 { cout lineStrendl; stringstream ss(lineStr); //读取内容放置在 ss流 中, 括号相当于初始化 string str; vectorstring lineArray; // 按照逗号分隔 while(getline(ss, str, ,)) // ss 中 按照 “” 逗号分割将ss 分割成一个个str { lineArray.push_back(str); // 将字符串放置到 line Array cout strendl; } strArray.push_back(lineArray); } getchar(); return 0;}   outFile.open(data.csv, ios::out);前面的双引号内容为csv文件路径若没有输入文件路径则在编译器默认路径下生成一个csv文件。‘这就是我分享的vector的一些介绍和使用如果大家有什么更好的思路也欢迎分享交流哈。—END—推荐阅读【1】嵌入式的我们为什么要学ROS【2】嵌入式底层开发的软件框架简述 【3】CPU中的程序是怎么运行起来的 必读【4】C的匿名函数(lambda表达式)【5】阶段性文章总结分析本公众号全部原创干货已整理成一个目录回复[ 资源 ]即可获得。更多分享扫码关注我此外CSDN的C特训营课程正式开始啦扫码提前占位?
http://www.lebaoying.cn/news/77264.html

相关文章:

  • 会议网站建设方案模板WordPress做头部的插件
  • 科技公司网站系统目录 首页 wordpress
  • 做最好的色书网站如何自己做网站
  • 长沙建站网站网站建设东莞长安镇
  • 临沂网站建设设计公司景德镇陶瓷学院校友做网站的
  • 长沙网站建设0731上海闵行区租房
  • 装饰网站建设运营手机360网站seo优化
  • 北京电商网站开发网店搜索引擎优化的方法
  • 网站同步更新到新浪微博网站虚拟主机是什么
  • 专业提供网站建设服务公司wordpress 精致博客
  • 网站半年了 没有流量速卖通跨境电商平台
  • 漯河住房建设局网站珠海网站建设贵公司
  • 网站后台开发技术jsp网站开发 心得
  • 网站视频你懂我意思吧app手机百度下载安装
  • 做货代的有哪些网站百度竞价 十一 pc网站 手机网站
  • 设计网站包含的功能模块建站平台代理
  • 育婴网站模板北京传媒公司排行榜
  • jsp网站开发四库网站建设合同书范本
  • 免费上线个人网站鄂州seo厂家
  • 网站规划设计是什么样的多企业宣传网站建设
  • 自己怎么建设网站公司网页设计的公司
  • 游戏网站建设免费版wordpress媒体库插件
  • 肥城 网站建设站长工具域名查询ip
  • 南头专业外贸网站建设公司建设通是正规网站吗
  • 网络经营范围包括哪些东莞搜索seo关键词
  • 怎样将自己做的网站发布到外网上需要注册的网站建设
  • 网站搭建技术要求广州各区风险区域最新动态
  • 移动互联网网站建设金城武重庆森林经典台词
  • 哪里找高清图片素材江门网站seo优化
  • 宁波技术好的企业网站制作如何用微信小程序开店