C++学习笔记
文章平均质量分 51
C++学习笔记
algsup
这个作者很懒,什么都没留下…
展开
-
字符串处理函数:sscanf 的用法
一直对于一些日期字符串中数字的提取比较头疼,现看到 sscanf 对于字符串中的内容提取较方便,学习记录如下。方便以后查询。原创 2022-09-21 15:49:56 · 22308 阅读 · 0 评论 -
C++:位运算进行字母小大写互换
方法:测试代码:原创 2022-07-07 11:25:05 · 433 阅读 · 0 评论 -
C++:向上取整、向下取整小技巧
如下图:原创 2022-04-03 20:08:19 · 3628 阅读 · 1 评论 -
C++:lambda表达式
前言:将以前自己做的lambda表达式的笔记传到博客上来,一来供自己查阅,二来给有需要的人提供思路。文章目录0x01)lambda表达式1、lambda表达式形式如下:[capture] (parameters) mutable ->return-type{statement}2、向lambda传递参数3、使用捕获列表4、调用find_if5、for_each算法6、完整的biggies0x02)lambda捕获和返回1、值捕获2、引用捕获3、隐式捕获4、可变lambda5、指定lambda返回原创 2022-01-07 16:10:02 · 1859 阅读 · 0 评论 -
C++:浅析STL之priority_queue构建大根堆与小根堆
前言:今日刷题用priority_queue<int,vector<int>>来构建堆,然后加了一个函数对象greater<int>,然后把大根堆和大根堆搞错了。需要使用的头文件:#include <queue>优先队列的定义:它允许用户为队列中元素设置优先级,放置元素的时候不是直接放到队尾,而是放置到比它优先级低的元素前面,标准库默...原创 2019-11-22 21:27:47 · 14043 阅读 · 1 评论 -
记录C++编译的两个坑点(链接错误):模板不支持分离编译与main.cpp不能调用另一个cpp文件
结论如下:1)使用模板的cpp文件实现不能分离编译,也就是模板的声明和实现都要在同一个.h文件中,然后.cpp文件调用就好了。如果非要分离编译,就会导致链接错误了。2)main.cpp不允许直接去调用另一个.cpp文件,这样也会导致链接错误。因为A.cpp(include "B.cpp" )在预处理阶段会将B.cpp的代码引用进去,并且编译器也会单独预处理B.cpp,然后A.cpp与B....原创 2019-11-22 19:29:27 · 598 阅读 · 3 评论 -
关于C++引用的九点说明
前言:除了5、6点这两个特殊情况外,引用的类型必须其所引用的类型一致。C++引用:1)引用是基本数据类型(int,float,double,long,long long)与变量名(a,b,c...)中加了一个类型修饰符&,这个变量表示为一个引用。测试代码如下:int i=0;int &j=i;//这里的j表示为一个引用2)引用与它所绑定的对象共用一块内存空间,也就是...原创 2019-11-02 19:51:29 · 1076 阅读 · 0 评论 -
源程序.cpp编译链接生成可执行文件.exe的详细过程以及动态链接库dll和静态链接库lib的区别
一、前言.c或.cpp文件生成可执行文件.exe分为两个过程,即编译过程和链接过程。编译是把文本形式源代码翻译为机器语言形式的目标文件的过程。链接是把目标文件、操作系统的启动代码和用到的库文件进行组织,形成最终生成可执行代码的过程。二、编译过程编译过程分为:预编译过程,编译过程,汇编过程。2.1、预编译过程读取.c或.cpp源程序,对其中的伪指令(以# 开头的指令)和特殊符号进行处...原创 2019-07-11 21:18:52 · 5878 阅读 · 0 评论 -
C++:浅析iterator头文件中的advance()、next()、prev()函数
advance()的简单解释及用法advance()的函数原型template< class InputIt, class Distance >void advance( InputIt& it, Distance n );template< class InputIt, class Distance >constexpr void advance( I...原创 2019-10-17 18:53:00 · 3742 阅读 · 0 评论 -
C++:map自定义排序
前言:今日做leetcode692:前K个高频单词(medium)这道题的时候,本来以为map可以使用直接用sort排序的,然后导致我在oj一直在通过不了,遂在本地ide调试还是编译不通过。甚至我一度怀疑我lambda写错了,然后换了自定义比较函数也不起作用;然后看了下sort支持二元谓词函数的啊;最后在网上找到相关解释了,记录一下吧。map排序:map中的元素是关键字—值(key-val...原创 2019-09-20 20:34:39 · 12362 阅读 · 3 评论 -
C++面试题:STL中的sort排序是稳定排序吗?
前言:最近看到一个C++的面试题,问道STL中的sort排序是否是稳定排序?回答:sort()排序当然不是稳定排序,sort是主要用到了快速排序,还结合了插入排序和堆排序。注:关于sort的理解最好的方式就是看源码和看书补充:STL中的排序算法如下:Effective STL对如何选择排序函数总结的很好:1)若需对vector, string, deque, 或array...原创 2019-08-26 22:59:04 · 10677 阅读 · 1 评论 -
关于C++的左移右移运算
<<左移运算符:expr1<<expr2表示expr1在计算机内部转换而成的二进制数字串左移expr2位,表面理解就是十进制数字expr1扩大2expr2倍右移运算符:expr1>>expr2表示将expr1在计算机内部中转换而成的二进制数字串右移expr2位,表面理解就是10进制数组expr1缩小2expr2倍测试代码:#include <iost......原创 2019-08-26 14:33:58 · 9804 阅读 · 1 评论 -
C++:二维数组的地址存储方式
易混淆的知识点:1)大部分单独使用数组名的地方,编译器大多都会将其转换为指向数组首元素的指针(数组首元素的地址)。在这里举例三种情况数组名是不会转换为首元素的地址的:1、使用sizeof测数组的字节数;2、使用decltype获得数组的类型;3、直接用typeid().name()测数组的类型int Array[10][10] = {0};cout << sizeof(Arr...原创 2019-08-22 10:28:32 · 7161 阅读 · 0 评论 -
C++:istringstream使用自定义字符代替默认空格来划分字符串
问题:一般对于一整行string句子,我们默认使用istringstram>>word来根据空格来划分单词,但是我们如何自定义划分符来划分string句子呢?解决方法:使用getline来自定义字符来划分句子,来获得单词。参考代码如下:...原创 2019-08-21 00:19:22 · 1430 阅读 · 0 评论 -
C++:const常量的存储位置
前言:今日看cpp的内存管理这块,偶然想到加关键字const修饰的变量位于哪块内存区?遂在网上一顿搜索和群里与大神交流,得出以下结论。结论:1、const修饰的量不是常量,仅仅是个只读量...原创 2019-08-12 19:54:34 · 20000 阅读 · 11 评论 -
C++内存空间:静态存储区、栈、堆、文字常量区、程序代码区
前言:对于程序中使用的对象都有着严格的生存期。对于局部对象,当我们调用局部对象所在的程序时为其在栈上分配内存空间,程序调用完成释放该对象的内存空间。对于全局对象,其在程序启动时在静态存储区分配内存空间,在程序结束时销毁内存空间。对于局部static对象在第一次使用前分配内存空间,在程序销毁时释放内存空间。除了自动和static对象外,C++还支持动态内存分配。动态分配的对象的生存期由程序员自...原创 2019-08-08 22:54:04 · 8230 阅读 · 1 评论 -
STL容器的类型别名
顺序容器的类型别名:size_type:无符号类型数,表示容器的大小iterator:表示该容器的迭代器类型const_iterator:可以读取元素,但是不能修改元素的迭代器类型value_type:元素类型reference:元素的左值类型,与value_type &含义相同const_reference:元素的const左值类型,与const value_type &am...原创 2019-07-28 09:12:27 · 1083 阅读 · 0 评论 -
C++的五类迭代器
文章目录1、输入迭代器:可以读取序列中的元素2、输出迭代器:可以看成输入迭代器的补集——只写而不读取元素3、前向迭代器:可以读写元素4、双向迭代器:可以正向/反向读写序列中的元素5、随机访问迭代器:提供在常数时间内访问任意元素的能力前言:根据算法所要求迭代器的操作,可将迭代器分为5个迭代器类别。类似容器,迭代器也定义了一组公共操作。一些操作所有迭代器都支持,另外一些只有特定类别的迭代器才支...原创 2019-07-24 12:54:39 · 2790 阅读 · 0 评论 -
C++创建并写入一个txt文件,iostream流迭代器读取文件内容
前言:今天学习cpp primer要弄一个使用流迭代器读取一个txt文件,并存入vector中的string中。本人感觉提前加入一个txt文件读取不太好,遂打算直接利用代码的方式创建一个txt文件,并向这个txt文件中写入string,然后再利用iostream迭代器来遍历txt文件,将其中的string单词添加到vector中。代码如下:(相关注解已给)#include <iost...原创 2019-07-23 20:03:54 · 4992 阅读 · 0 评论 -
C++ primer 练习 9.52——[中缀表达式求值]
题目:emmm,说实话呀,昨天我就做到这题了,看了好几遍也没读懂题目意思,然后参考的大神的博客,算是解出来了吧。大神博客:https://blog.csdn.net/fengzhanghao23/article/details/48493757本题的大致意思就是利用栈求一个算术表达式的值,这里我是参考网上的代码,即使用中缀表达式求算法表达式的值。例如表达式:(1+2)*3/(2-1)解题...原创 2019-07-17 17:42:36 · 1285 阅读 · 0 评论 -
C++容器适配器
文章目录容器适配器1、定义一个适配器2、栈适配器3、queue适配器4、priority_queue适配器容器适配器除去顺序容器vector(向量,可变大小数组),deque(双端队列),list(双向链表),forward_list(单向链表),array(固定数组大小,array的大小不可变)外,标准库还定义了三个顺序容器适配器(stack、queue、priority_queue)。适...原创 2019-07-17 17:30:37 · 1655 阅读 · 0 评论 -
C++中string的最强总结
1、string对象的初始化或构造2、string对象上的操作3、处理string中的字符原创 2019-07-15 12:14:05 · 2367 阅读 · 0 评论 -
使用C++的const引用的需要额外注意的两点
写在前面:根据《C++ primer 5 th》的引用章节的讲述,除了下面即将要介绍引用的两个例子外,其他所有的有引用的类型都要与之绑定的对象的类型严格匹配。例外情况一:初始化常量引用时允许任意表达式(非常量的对象、字面值、甚至是一个一般表达式)作为初始值int i=42;const int &it1=i; //正确:允许const int&绑定到一个普通int对象c...原创 2019-07-14 23:03:34 · 960 阅读 · 0 评论 -
C++中string类的size和length到底有没有区别?
C++标准库中的string中两者的源代码如下: size_type __CLR_OR_THIS_CALL length() const { // return length of sequence return (_Mysize); } size_type __CLR_OR_THIS_CALL size...原创 2019-07-14 10:13:16 · 12508 阅读 · 1 评论 -
C++容器的swap()函数的三点说明
写在前面:1、使用范围for遍历容器的每个元素,需要使用auto& it引用元素的同一块内存空间,不要使用auto it因为范围for的原型就是容器迭代器遍历元素,将迭代器所致的元素值然后拷贝给it,所以it又是栈上的一块内存空间了。建议使用引用类型,若不需要修改则写成const auto &it,需要修改写出auto &it。2、关于array的swap的两个数组的...原创 2019-07-13 23:25:54 · 12563 阅读 · 7 评论 -
C++中的关键字inline的用法
参考博文:https://www.cnblogs.com/fnlingnzb-learner/p/6423917.html转载 2019-07-13 08:24:59 · 1138 阅读 · 0 评论 -
浅谈C++浅拷贝与深拷贝
拷贝有两种:深拷贝,浅拷贝。 当出现类的等号赋值时,会调用拷贝函数,在未定义显示拷贝构造函数的情况下,系统会调用默认的拷贝函数——即浅拷贝,它能够完成成员的一一复制。当数据成员中没有指针时,浅拷贝是可行的。但当数据成员中有指针时,如果采用简单的浅拷贝,则两类中的两个指针将指向同一个地址,当对象快结束时,会调用两次析构函数,而导致指针悬挂现象。所以...原创 2019-07-03 13:49:34 · 1296 阅读 · 0 评论 -
scanf()和printf()较cin、cout流在各种刷题OJ或项目中的优先使用
使用cin和cout较scanf()和printf()的优点:cin的输出不需要指定格式,也不需要加取地址符(&),直接写变量名,同样cout也是不需要指定格式,还可以使用endl刷新缓冲区(flush)和换行(\n)达到换行的目的。而scanf()输入变量需要指定格式,还需要取地址符(&),printf()输出变量也需要指定格式。使用cin和cout较scanf()和pri...原创 2019-05-22 20:39:31 · 1782 阅读 · 0 评论 -
Google的C++编码规范
最近本人在刷oj时发现给变量取有意义的名字,没有遵循什么规则,遂在网上找到关于Google的C++编码规范,予以记录,方便以后查看。中文链接:http://zh-google-styleguide.readthedocs.org/en/latest/google-cpp-styleguide/英文链接:http://google-styleguide.googlecode.com/svn/tr...转载 2019-05-22 17:22:01 · 1152 阅读 · 0 评论 -
关于C++的仿函数
先考虑一个简单的例子:假设有一个vector,你的任务是统计长度小于5的string的个数,如果使用count_if函数的话,你的代码可能长成这样: bool LengthIsLessThanFive(const string& str) { return str.length()<5; } int res=count_if(vec.begin(), vec....转载 2019-05-22 15:06:36 · 1247 阅读 · 0 评论 -
cout打印输出char在ASCII(0,127)范围之外的整数
https://blog.csdn.net/FlushHip/article/details/82498670原创 2019-05-15 22:56:48 · 2415 阅读 · 0 评论 -
cin清空输入缓冲区以及解决无法输入问题
vector<int> iVal;int n;while(cin>>n){ cout<<"循环!"<<'\n'; iVal.push_back(n);}但如果第一次没有输入有效字符(比如输入ctrl+z,回车)或者第一个输入为非法字符,则程序陷入死循环,不停的输出提示信息,但是不允许用户再次输入。原因:如果第一次没有输入有效字符,以...原创 2019-04-15 23:21:48 · 1798 阅读 · 0 评论 -
介绍C++中的顺序容器以及优缺点
顺序容器的类型:使用string和vector优点:由于其元素是连续存储的,所以可以通过元素的下标来实现快速访问。缺点:在这两种容器中插入和删除元素很费时,原因是在一次插入或删除操作时,需要移动插入/删除位置之后的所有元素。使用list和forward_lish优点:在容器的任何位置插入和删除元素很快。缺点:不支持元素的随机访问,如需访问一个元素则要遍历整个遍历整个容器,很耗时。forwa...原创 2019-04-13 11:52:20 · 1393 阅读 · 0 评论 -
C++中顺序容器的添加、删除、访问元素等操作
1、向顺序容器中添加元素的操作关于此表的几点说明:1、注意函数是在哪个位置插入元素2、注意添加完元素外,函数的返回值是什么,以及插入元素后的迭代器、指针和引用还是否有效?3、使用push_back时,是在容器的尾部创建了一个新的元素,size+1,然后用对象值来初始化该元素,注意是拷贝对象值给容器中新构建的元素。函数的返回值是void。4、使用push_front时,deque、lis...原创 2019-04-12 22:53:01 · 1610 阅读 · 0 评论 -
浅析导致指向顺序容器的指针、引用或迭代器失效的几种情况
向容器添加元素或者从容器中删除元素操作可能导致使指向容器的指针、引用或迭代器失效。一个失效的指针、引用或迭代器将不再表示任何元素。使用失效的指针、引用或迭代器是一种错误的方式,可能引起与未初始化指针一样的问题。向容器中添加元素后:1、容器是vector或string,若存储空间被重新分配,指向容器的指针、引用或迭代器失效。存储空间没有重新分配,插入位置之前的指向容器的指针、引用或迭代器有效...原创 2019-04-12 22:52:43 · 859 阅读 · 0 评论 -
理解C++中ifstream、ofstream、fstream文件输入输出
文件输入输出头文件fstream定义了三个类型的头文件:1、ifstream从一个给定文件读取数据2、ofstream向一个给定文件写入数据3、fstream可以读写给定文件fstream除了继承了iostream类型的行为外,还增加了一些新的功能,所以IO类型不能调用这些新的功能:1、使用文件流对象输入流in用于初始化从文件中读取数据。在C++新标准中,文件名既可以是库类型str...原创 2019-03-21 16:54:56 · 2350 阅读 · 0 评论 -
理解C++中的IO类以及缓冲区
IO类IO类型和对象都可以操作char数据,也可以操作宽字符。iostream定义了用于读写流的基本对象fstream定义了读写命名文件的类型sstream定义了读写内存string对象的类型cin>>n;//键盘输入n,利用右移运算符>>,cin读取n的值,然后存储在计算机内存中cout<<n;//左移运算符<<将n的值写入到输出流对象c...原创 2019-03-21 16:41:52 · 767 阅读 · 0 评论 -
C++11新特性
原文地址:https://blog.csdn.net/byxdaz/article/details/886033871、类型与变量相关1.1、nullptrC++11 引入了 nullptr 关键字,专门用来区分空指针、0。在某种意义上来说,传统 C++ 会把 NULL、0 视为同一种东西,这取决于编译器如何定义 NULL,有些编译器会将 NULL 定义为 ((void*)0),有些则会直...转载 2019-03-18 17:11:37 · 328 阅读 · 0 评论 -
理解C++中的cin和cout
嗯嗯原创 2019-03-17 19:44:43 · 863 阅读 · 0 评论 -
C++运算表达式求值顺序
求值顺序优先级虽然规定了运算对象的组合方式,但是没有说明运算对象按照什么顺序求值。例如:int i=f1()*f2();//我们不知道先求f1还是先求f2,倘若f1和f2指向并修改了同一对象,则会引发错误。例如:int i=0;cout&lt;&lt;i&lt;&lt;‘ ’&lt;&lt;++i;结果:本人在VS2017中得到的允许结果为1、1,这个就是错误表达式,产生未定义的行为。有...原创 2019-03-12 21:35:50 · 3212 阅读 · 0 评论