vector声明初始化
vectorint sub(5, 10)确实代表**“给我造 5 个位置里面全都填上 10”**。这是vector最基础的用法之一。那为什么还能用(v.begin(), v.begin() 3)这种长相完全不同的写法呢其实C 的容器非常聪明它内部提供了好几套不同的“初始化图纸”在编程里叫作“构造函数”Constructors。编译器会根据你括号里塞进去的东西自动决定用哪张图纸来干活。1. 拆解这套“神奇”的图纸迭代器范围初始化当你写出vectorint sub_v(v.begin(), v.begin() 3);时你触发的是 C 标准库里极其强大的一个绝招范围构造Range Constructor。它的底层逻辑是这样的不看数量和固定值它不再像(5, 10)那样直接指定数量和内容。只认“起点”和“终点”它要求你给它两个“书签”迭代器。第一个书签插在起点第二个书签插在终点。自动复印vector会顺着起点一路把数据“复印”到自己的肚子里直到碰见终点书签为止。划重点它是“左闭右开”的。也就是包含起点元素但不包含终点元素。v.begin() 3指向的是第 4 个元素所以它实际上复印的是第 1、2、3 个元素。2. 这招为什么厉害跨物种复印这种用“起点和终点”来初始化的方式神奇之处在于它不挑食。只要内存是连续的或者能一步步往下读的它都能复印你不光能从另一个vector里切一块出来甚至能直接从普通的 C 语言老式数组里复印数据intold_arr[]{100,200,300,400,500};// 直接把老式数组的前3个元素无缝装进现代的 vector 里vectorintnew_v(old_arr,old_arr3);3. Vector 的 5 种常见“出生方式”大盘点为了帮你彻底理清我把vector最常用的几种初始化“套餐”列在一起以后遇到就不懵了默认套餐空手套白狼vectorint v1;结果一个空盒子长度为 0。克隆套餐完全照抄vectorint v2(v1);结果照着 v1 模子刻一个一模一样的 v2。批量套餐vectorint v3(5, 10);结果包含 5 个元素全是 10。截取套餐比较常用要记住vectorint v4(v3.begin(), v3.end());*结果复印别人的一段范围这里写 end() 就是复印全部。vector v4(v3.begin(),v3.begin()3) v3的前三位精准复制清单套餐C11 新特性最直观数组—干回老本行了vectorint v5 {1, 2, 3, 4, 5};结果直接把大括号里的值装进去。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2424114.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!