C++与我的甜蜜第二天
想一想,C++貌似和C没有很大的区别,甚至可以用C的任何代码,除了引用不要和指针混淆。
总结一下目前已知的C艹和C的我写代码时候遇到的区别:
- #include ??? 没错,就是引入库的时候变了,不过都是输入输出流,没必要在意太多,不用".h"了
- 输入输出格式
cout << "" << endl;cin >> "";
- string,一个非常实用的类库
- 可以使用引用,可以理解为一个变量多个名字,而不像我们使用的指针变量取到的变量地址,更加灵活,这个引用我目前找不到什么用处。
- 数据类型多了bool,好像C#也只多了一个bool,啊,貌似也集合了string。
- 动态内存管理不需要用malloc了,直接用new就可以,比较灵活,直接自己判断数据类型和空间大小。
我的STL学习
STL(Standard Template Library)标准模板库!!再也不用我在C里面手打一堆了!从表面上来说,STL就是一些“容器“和“算法”的集合。其实编程不就是数据结构加算法么?容器就是将一些数据结构封装了,可以直接进行调用。
列举STL的所有头文件:、、、、、、、、、、、和。
必须一个一个好好学嗷,芜湖~
(不学STL的C++就不是完整的C艹)
简单的stl入门:
1、Container
是一种数据结构,也是stl中几乎是最重要的,包含了list,vector,stack,queue等。可以使用由容器类输出的迭代器。(这里一环扣一环)
2、Iterator
迭代器,是一种特殊的指针,它提供了访问容器中对象的方法,至于在程序设计中,它扮演了容器和算法之间的胶合剂,可以安全地对容器内容进行操作,或是进行算法模板的使用。(调用容器进行算法的构建,容器只是一个数据结构,即对象)
3、Algorithm
算法,是一类常用的算法模板,就可以对容器进行操作,同时其开放性也让算法类本身可以针对数组或是自定义结构体等结构进行直接的操作。
4、Function object
仿函数,抽象来说是一种行为类似函数,我们可以理解为一种高级的,重载了()操作符的结构体与类。/有点不懂/
5、Iterator Adaptor
迭代适配器,是一种用来修饰容器或者仿函数的接口,它使得适配器能够让算法以逆向模式、安插模式工作,甚至可以与流配合。对容器起到非常大的辅助作用,同时他还将迭代器进行了更高级别的抽象。
6、allocator
是负责空间的配置与管理,重点就是对容器的空间申请和空间释放进行管理,可以理解为C的malloc和free函数,C++的new和delete关键字。动态内存管理。
容器
- Vector
1、概念
可以翻译为向量,或向量数组,至于为什么以向量命名,可以理解为一维空间也是存在向量的。
Vector是最简单的容器,就像数组一样,向量使用连续的存储位置作为元素,这就意味着它们的元素可以使用常量指向其元素的偏移来访问,与数组一样有效。但与数组不同,他们的大小可以动态变化
,其存储由容器自动处理。(是动态的!!!!)
2、相关头文件->#include<vector>
3、初始化->vector<data_type>name;
vector<int> v1; //创建一个空的向量v1
vector<int> v2(10); //创建一个向量v2,其已开辟10个元素的空间,相当于int v[10];
vector<int> v3(10,5); //创建一个向量v3,其已开辟10个元素的空间并全部赋值为5
vector<int> v4(v3.begin(),v3.end()); //创建一个向量v4,其内容为向量v3的内容
vector<int> v5(v4); //创建一个向量v5,其包含了v4的全部内容
4、迭代器
是安全访问器,不像指针,可能造成内存访问错误,里面有很多预防错误的方法和多种访问方式。在stl使用中一般用迭代器对容器进行访问,因此创建容器的迭代器。
遍历代码:
vector<int> v; //创建一个向量v
vector<int>::iterator it; //C98标准
for(it=v.begin();it!=v.end();it++){cout<<*it<<' ';
}//这不就是指针的形式么,还挺贴心的,为我们这些C老用户着想
下标形式:
for(int i=0;i<v.size();i++){cout<<v[i]<<' ';}
5、常用接口(此处没有全部列出)
首先,我们使用vector<int> v;
预先创建了一个向量
- 向量尾部插入push_back()
在向量的末尾加入一个新元素,并将容器自动扩容一个。
函数原型为:void push_back(const value_type& val);
使用举例:v.push_back(10); //插入一个数据10
- 向量尾部删除pop_back()
溢出向量尾的最后一个元素,并将容器大小减小一个。和上面的是相反的,推拉动作。
使用举例Lv.pop_back();
- 插入insert()
插入元素到指定位置,通过元素之前在指定位置插入新元素来扩展向量,从而有效地增加容器大小。
函数原型:
插入单一数据到指定位置:
iterator insert (iterator position, const value_type& val);
插入一段数据到指定位置:
void insert (iterator position, size_type n, const value_type& val);
插入一段别的容器的数据到指定位置:
template <class InputIterator>
void insert (iterator position, InputIterator first, InputIterator last);
举例:
v.insert(v.begin(),10); //在向量最前端插入数据10v.insert(v.begin(),5,20); //在向量最前端插入5个数据20vector<int> k(2,50); //创建一个新的向量k,其拥有2个元素内容均为50v.insert(v.begin(),k.begin(),k.end()); //在向量v最前端插入向量K的全部内容
- 删除erase()
删除一个元素,或是一段区间的元素,将会自动缩减空间的使用。
函数原型:
iterator erase (iterator position);
iterator erase (iterator first, iterator last);
使用举例:
v.erase(v.begin());//删除第一个元素
v.erase(v.begin(),v.begin()+4);//删除从第一个开始后的四个元素,包括第一个
- 清空clear()
将向量中所有元素清空。
函数原型:
void clear();
使用举例:
v.clear();
//显然这的v都利用vector的类方法,很实用啊
- 数据大小size()
返回向量中的数据元素个数 。
函数原型:
size_type size() const;
使用举例:
cout << v.size() << endl;//输出数据大小
- 已开辟最大快读capacity()
返回向量最大已开辟的空间大小,明显和上面的有区别,因为开辟的空间可能没存数据。
函数原型:
size_type capacity() const;
使用举例:
vector<int>v(3,10)//创建默认有3个值为10的元素的向量v
v.insert(v.begin(),10,20);//在向量最前端插入10个值为20 的数据
v.erase(v.begin(),v,begin()+4);//删除从第一个开始后的四个元素
cout << v.size() << endl;//输出数据大小
cout << v.capacity() << endl;//输出容器大小
- *最大支持空间max_size()
返回计算机支持开辟vector的最大空间值,一般来说和计算机内存和CPU相关,是一个极大的数据,不同计算机中可能不同。
函数原型:
size_type max_size() const;
使用举例:
vector<int> v(5,10);//创建默认有五个值为10的元素的向量v
cout << v.max_size() <<endl; //输出可以创建的vector空间的最大值。
C++与我的甜蜜第二天相关推荐
- 脱贫攻坚“甜蜜行”基层医生培训班第二期在怀化举办,3市共50名村医参加
2019年11月8-9日,由湖南省民政厅主办.湖南省三诺糖尿病公益基金会和湖南佰骏医疗慈善基金会承办的湖南省社会组织参与脱贫攻坚"甜蜜行"基层医生培训(第二期)在怀化成功举办,来自 ...
- 甜蜜之家第二章发布,空降Steam热销榜前十,欲重回恐怖游戏巅峰
<甜蜜之家>也因为这群玩家的口口相传而成为了当年的爆款游戏,但是在游戏结尾制作者却给了一句"未完待续"就让故事草草完结了.虽然他们承诺会有第二章公布但是在2年时间里玩家 ...
- 专访平安科技首席科学家肖京:平安智能化的甜蜜与辛酸
业界人工智能智能驾驶AI+Fintech未来医疗网络安全AR/VR机器人开发者智能硬件物联网GAIR Fintech正文 0 专访平安科技首席科学家肖京:平安智能化的甜蜜与辛酸 | CCF-GAIR ...
- 李湘确逢“第二春” 1月已再婚11月便当妈(图)
没了"钻石",李湘第二春更完美 李湘和王岳伦因<十全九美>相恋 李湘是真怀孕,还是在为新片<熊猫大侠>炒作?李湘和王岳伦到底结婚没有?自从媒体拍到王岳伦医院 ...
- 1126: 第二章:我们都有梦想
//很久之前写的,入个档 1126: 第二章:我们都有梦想 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 500 Solved: 161 [Submit ...
- 使C#代码现代化——第二部分:方法
目录 介绍 背景 什么是方法? 现代方式 扩展方法 委托 Lambda表达式 LINQ表达式 方法表达式 局部函数 结论 介绍 近年来,C#已经从一种具有一个功能的语言发展成为一种语言,其中包含针对单 ...
- 丈夫三次“买凶杀妻” 妻子毫无所觉称婚姻甜蜜
上从台湾飞到福建的飞机,他们要在当晚赶到定居在福建的邹萱哥嫂家中,与早已等候在那里的邹萱父母团聚过年. 团圆.团聚,都是多么美好的字眼.看起来,这是一趟温馨幸福的旅程.邹萱大概做梦也想不到,早在半年前 ...
- 2019八泉峡第二届国际露营大会即将开启
盛夏七月,红色旅游.短期研学.上山避暑.入海纳凉.自驾露营,N种打开方式的暑期旅游正如火如荼地进行. 而兼具了多种元素的2019八泉峡第二届国际露营大会也即将拉开帷幕.7月27-28日,大家将同赴山西 ...
- 奶茶自由让人上头,95后为何钟爱这一杯甜蜜疗愈?
如果是你,会怎样形容奶茶?95后却有自己的一套标准: ·奶茶是茶,茶是养生的,所以喝奶茶不会胖 ·奶茶是奶,奶是健康的,所以喝奶茶不仅不胖还能补充营养 ·喝奶茶要加冰,因为冰会带走其他热量,所以喝奶茶 ...
最新文章
- Redis系列2- C#中使用Redis的示例
- 两个月入门深度学习,全靠动手实践!一位前端小哥的经验分享
- 腾讯下载视频转换MP4
- Python UDP聊天器
- python中组合与继承的区别_python类与对象的组合与继承
- ubuntu scp命令或者用root连接ssh提示:Permission denied, please try again.错误
- 牛客题霸 [判断一个链表是否为回文结构] C++题解/答案
- 目标检测回归损失函数总结
- LINUX下多路径(multi-path)介绍及使用
- ToolScrip的设置与用法 (C#.NET Winform)
- java 高效遍历map_精髓!Java中遍历Map集合的五种方式
- win10操作系统使用IE8浏览器仿真环境
- GoAhead学习之GoForms
- cad汉仪长仿宋体_cad长仿宋体下载
- jQuery TagsInput
- 【计算机毕业设计】092二手闲置交易市场系统
- 基于django+mysql的教师教学质量评价系统源代码,教学评价系统源码
- 机械臂抓取实验笔记总结
- ps中如何把图片变白底
- include在HTML中的用法
热门文章
- 个人信息保护合规建设桔皮书
- ActiveMQ性能优化笔记
- Flex BlazeDS整合Spring在Tomcat下的安全验证
- adb传输文件报错couldn‘t create file:Read-only file system
- MongoDB学习(接上文)
- autoCAD 控制应用程序窗口 和 图形窗口
- postman高阶脚本
- 【前端】js 在浏览器窗口飘来飘去的div
- qq服务器运行失败,QQ连接服务器超时,请重试,错误码0x00000001解决方法分享
- python turtle 椭圆_Python易学就会(五)turtle绘制椭圆与递归