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

云免网站空间企业为什么做网站

云免网站空间,企业为什么做网站,百度手机网站提交,成都建工官网#x1f4d9; 作者简介 #xff1a;RO-BERRY #x1f4d7; 学习方向#xff1a;致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 #x1f4d2; 日后方向 : 偏向于CPP开发以及大数据方向#xff0c;欢迎各位关注#xff0c;谢谢各位的支持 目录 1.1 vector的介绍2 v… 作者简介 RO-BERRY 学习方向致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 日后方向 : 偏向于CPP开发以及大数据方向欢迎各位关注谢谢各位的支持 目录 1.1 vector的介绍2 vector的使用2.1 vector的定义2.2 vector的打印2.3 vector\char与string的区别2.4 vector的迭代器const对象使用const迭代器进行遍历打印使用迭代器进行遍历打印使用迭代器进行修改使用反向迭代器进行遍历再打印 2.5 vector 空间增长问题vector的resize测试vector的默认扩容机制reserve提前扩容 2.6 vector 增删查改尾插和尾删push_back/pop_backinsert和erase以及查找findoperator[]index 1.1 vector的介绍 vector的文档介绍 vector是表示可变大小数组的序列容器。就像数组一样vector也采用的连续存储空间来存储元素。也就是意味着可以采用下标对vector的元素进行访问和数组一样高效。但是又不像数组它的大小是可以动态改变的而且它的大小会被容器自动处理。本质讲vector使用动态分配数组来存储它的元素。当新元素插入时候这个数组需要被重新分配大小为了增加存储空间。其做法是分配一个新的数组然后将全部元素移到这个数组。就时间而言这是一个相对代价高的任务因为每当一个新的元素加入到容器的时候vector并不会每次都重新分配大小。vector分配空间策略vector会分配一些额外的空间以适应可能的增长因为存储空间比实际需要的存储空间更大。不同的库采用不同的策略权衡空间的使用和重新分配。但是无论如何重新分配都应该是对数增长的间隔大小以至于在末尾插入一个元素的时候是在常数时间的复杂度完成的。因此vector占用了更多的存储空间为了获得管理存储空间的能力并且以一种有效的方式动态增长。与其它动态序列容器相比deque, list and forward_list vector在访问元素的时候更加高效在末尾添加和删除元素相对高效。对于其它不在末尾的删除和插入操作效率更低。比起list和forward_list统一的迭代器和引用更好。 可以理解成vector就是一个顺序表后面跟着的是其存储的数据类型连续存储的空间 使用STL的三个境界能用明理能扩展 那么下面学习vector我们也是按照这个方法去学习 2 vector的使用 vector学习时一定要学会查看文档vector的文档介绍vector在实际中非常的重要在实际中我们熟悉常见的接口就可以下面列出了哪些接口是要重点掌握的。 2.1 vector的定义 (constructor)构造函数声明接口说明vector()重点无参构造vectorsize_type n, const value_type val value_type()构造并初始化n个valvector (const vector x); 重点拷贝构造vector (InputIterator first, InputIterator last);使用迭代器进行初始化构造 // constructors used in the same order as described above:vectorint first; // empty vector of intsvectorint second(4, 100); // four ints with value 100vectorint third(second); // a copy of secondvectorint fourth(second.begin(), second.end()); // iterating through second// 下面涉及迭代器初始化的部分我们学习完迭代器再来看这部分// the iterator constructor can also be used to construct from arrays:int myints[] { 16,2,77,29 };vectorint fifth(myints, myints sizeof(myints) / sizeof(int));2.2 vector的打印 这部分内容与string相类似主要分为 foroperator[]迭代器打印范围for void test1() {vectorint v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);for (size_t i 0; i v.size(); i){cout v[i] ;}cout endl;vectorint::iterator it1 v.begin();while (it1 ! v.end()){cout *it1 ;it1;}cout endl;for (auto e : v){cout e ;}cout endl;}2.3 vectorchar与string的区别 我们可以看到vectorchar和string都是对字符进行存储管理并且打印方式均一样那么他们两个是否就是没区别呢 vector和string都是C中的容器但它们有一些区别: 数据类型 vectorchar是一个动态数组可以存储char类型的元素而string是一个字符串类可以存储字符串。 存储方式 vectorchar使用连续的内存块来存储元素而string使用动态分配的内存来存储字符串。 操作方式 vectorchar可以通过下标访问和修改元素也可以使用迭代器进行遍历。而string提供了更多的字符串操作函数比如查找、插入、删除等。 字符串处理 string提供了更多的字符串处理功能比如连接、截取、替换等操作而vectorchar主要用于存储和处理字符序列。 内存管理 vectorchar需要手动管理内存包括分配和释放内存空间而string会自动管理内存不需要手动释放。 2.4 vector的迭代器 iterator的使用接口说明begin end重点获取第一个数据位置的iterator/const_iterator 获取最后一个数据的下一个位置的iterator/const_iteratorrbegin rend获取最后一个数据位置的reverse_iterator获取第一个数据前一个位置的reverse_iterator const对象使用const迭代器进行遍历打印 void PrintVector(const vectorint v) {// const对象使用const迭代器进行遍历打印vectorint::const_iterator it v.begin();while (it ! v.end()){cout *it ;it;}cout endl; }使用迭代器进行遍历打印 vectorint::iterator it v.begin();while (it ! v.end()){cout *it ;it;}cout endl; 使用迭代器进行修改 vectorint::iterator it v.begin();while (it ! v.end()){*it * 2;it;}使用反向迭代器进行遍历再打印 // vectorint::reverse_iterator rit v.rbegin();auto rit v.rbegin();while (rit ! v.rend()){cout *rit ;rit;}cout endl;PrintVector(v);2.5 vector 空间增长问题 先了解一下vector的容量空间 容量空间接口说明size获取数据个数capacity获取容量大小empty判断是否为空resize重点改变vector的sizereserve 重点改变vector的capacity 这里主要对resize进行讲解其他的均好理解 vector的resize reisze(size_t n, const T data T()) 将有效元素个数设置为n个如果时增多时增多的元素使用data进行填充 注意resize在增多元素个数时可能会扩容 void TestVector3() {vectorint v;// set some initial content:for (int i 1; i 10; i)v.push_back(i);v.resize(5);v.resize(8, 100);v.resize(12);cout v contains:;for (size_t i 0; i v.size(); i)cout v[i];cout \n; }测试vector的默认扩容机制 原理 在不手动改变vector的容量capacity的情况下我们不断往vector中存入数据vector在size将大于capacity的时候会进行扩容我们存入的数据与容量相同的时候对容量进行打印输出对值进行观察便可得到vector的默认扩容机制 void TestVectorExpand() {size_t sz;vectorint v;sz v.capacity();cout making v grow:\n;for (int i 0; i 100; i){v.push_back(i);if (sz ! v.capacity()){sz v.capacity();cout capacity changed: sz \n;}} }capacity的代码在vs和g下分别运行会发现vs下capacity是按1.5倍增长的g是按2倍增长的。 这个问题经常会考察不要固化的认为vector增容都是2倍具体增长多少是根据具体的需求定义的。vs是PJ版本STLg是SGI版本STL。reserve只负责开辟空间如果确定知道需要用多少空间reserve可以缓解vector增容的代价缺陷问题。resize在开空间的同时还会进行初始化影响size。 reserve提前扩容 如果已经确定vector中要存储元素大概个数可以提前将空间设置足够 就可以避免边插入边扩容导致效率低下的问题了 void TestVectorExpandOP() {vectorint v;size_t sz v.capacity();v.reserve(100); // 提前将容量设置好可以避免一遍插入一遍扩容cout making bar grow:\n;for (int i 0; i 100; i){v.push_back(i);if (sz ! v.capacity()){sz v.capacity();cout capacity changed: sz \n;}} }2.6 vector 增删查改 vector增删查改接口说明push_back重点尾插pop_back 重点尾删find查找。注意这个是算法模块实现不是vector的成员接口insert在position之前插入valerase删除position位置的数据swap交换两个vector的数据空间operator[] 重点像数组一样访问 尾插和尾删push_back/pop_back void TestVector4() {vectorint v;v.push_back(1);v.push_back(2);v.push_back(3);v.push_back(4);auto it v.begin();while (it ! v.end()){cout *it ;it;}cout endl;v.pop_back();v.pop_back();it v.begin();while (it ! v.end()){cout *it ;it;}cout endl; }insert和erase以及查找find 注意find不是vector自身提供的方法是STL提供的算法 void TestVector5() {// 使用列表方式初始化C11新语法vectorint v{ 1, 2, 3, 4 };// 在指定位置前插入值为val的元素比如3之前插入30,如果没有则不插入// 1. 先使用find查找3所在位置// 注意vector没有提供find方法如果要查找只能使用STL提供的全局findauto pos find(v.begin(), v.end(), 3);if (pos ! v.end()){// 2. 在pos位置之前插入30v.insert(pos, 30);}vectorint::iterator it v.begin();while (it ! v.end()){cout *it ;it;}cout endl;pos find(v.begin(), v.end(), 3);// 删除pos位置的数据v.erase(pos);it v.begin();while (it ! v.end()) {cout *it ;it;}cout endl; }operator[]index void TestVector6() {vectorint v{ 1, 2, 3, 4 };// 通过[]读写第0个位置。v[0] 10;cout v[0] endl;// 1. 使用for[]小标方式遍历for (size_t i 0; i v.size(); i)cout v[i] ;cout endl;vectorint swapv;swapv.swap(v);cout v data:;for (size_t i 0; i v.size(); i)cout v[i] ;cout endl;// 2. 使用迭代器遍历cout swapv data:;auto it swapv.begin();while (it ! swapv.end()){cout *it ;it;}// 3. 使用范围for遍历for (auto x : v)cout x ;cout endl; }
http://www.pierceye.com/news/502111/

相关文章:

  • 总行网站建设银行报培训机构是干什么的
  • 企业网站推广建议淳安千岛湖建设集团网站
  • 网站建设代码优化石家庄门户网站制作
  • 网站可以制作ios网站源码提取
  • 建设银行网站怎么开通手机通知做网站回答
  • 网页制作的价格大概三河网站seo
  • 东莞网站建设 信科网络wordpress图片域名
  • 软件行业 网站建设 模块吉林电商的网络推广
  • 自己有服务器和域名怎么做网站门户网站建设推荐
  • 兰州新站点seo代理吉林市网站建设招标
  • 网站开发形式选择wordpress tag__not_in
  • 中国建设银行官网登录入口手机版长沙seo外包平台
  • 网站开发过程分为哪几个阶段电子商务网站建设毕业设计
  • 网站建设管理风险点广州网站设计智能 乐云践新专家
  • 阿里云增加网站wordpress前台后台都空白
  • 做网站商城要注册什么公司建行官网官网网站吗
  • 国外做meta分析的网站wordpress 下载文件插件
  • 济南城市建设集团网站陕西网
  • 专业的网站设计制作怎么建正规网站
  • 用安卓做网站php网站开发系统
  • 58同城网站建设的不足网站前台代码
  • 网站建设销售人员培训教程长兴县建设局网站
  • 用vue框架做的pc端网站wordpress改造论坛
  • 大庆建设网站首页中国寰球工程有限公司网站设计
  • 免费搭建贴吧系统网站js做网站框架
  • 泰安如何选择网站建设网盘 商业网站建设案例课程 下载
  • 可信赖的邵阳网站建设动漫设计属于什么大类
  • 西安网站排名优化网站设计用什么软件实现
  • 网站注册页面模板html5教程百度云
  • 深圳装饰公司前十强佛山seo优化电话