- 博客(36)
- 收藏
- 关注
原创 C++剑指offer:从尾到头打印链表、链表反转、复制复杂链表、替换空格、左旋转字符串、数组中重复的数字、二维数组中的查找
输入一个链表的头节点,从尾到头反过来返回每个节点的值(用数组返回)。解:我的解法可能会有点脱裤子放屁的感觉,先声明一个栈,因为栈是先入后出,所以把链表的值都放到一个栈里面,然后再从栈内把每个val取出来赋值给数组,最后返回数组就可以了。还看到一些更简洁的代码,就是直接用vector来存储链表中的每一个val,然后用vector的reverse函数对数组进行反转,在reverse函数里面传入vector的begin和end就可以实现。
2022-12-14 21:30:01 374 4
原创 C++剑指offer:指向常量的指针和常量指针区别、用两个栈实现队列、包含min函数的栈
指向常量的指针和常量指针区别、用两个栈实现队列、包含min函数的栈
2022-12-13 22:52:31 173
原创 C++:递归函数、复杂函数声明、函数重载、指针和const辨析、顶层和底层const、内联函数、用于调试的宏
通俗理解就是函数名相同但是函数内形参不同,也正是由于形参的不同,编译器在编译时会根据传递的实参类型推断想要的是哪个函数。下面就此函数声明进行逐层理解。
2022-12-11 11:47:55 361
原创 C++:mian函数处理命令行选项、initializer_list模板类型
第一个形参argc表示数组中字符串的数量;第二个形参是一个数组,它的元素是指向字符串的指针;在编译完成后,直接把所要传入的数据跟在后面就可以实现参数的传递,这一点在Linux操作系统中很多bash都会需要命令传递,比如mkdir、cp、docker等等,都可以将其理解为将函数传参。
2022-12-09 23:28:01 129
原创 C++:函数基础、局部静态对象、联合编译
对于局部变量来讲,在函数作用域内定义,并在函数块结尾处销毁,但是对于局部静态对象而言,直到程序结束才会被销毁,局部静态使用static定义
2022-12-06 22:41:30 342
原创 C++:关于continue和break辨析、goto跳转示例
continue 和break都是执行就近一致原则continue只在for、while、do while循环内部break只在迭代语句或者switch语句内部使用goto实现上一个程序的功能try语句示例拖延了好几天终于在今天把这章结束了,期间发生了很多的事情,但是这不能成为我拖延的理由,每日学习每日鞭策自己,我一直很喜欢C罗和梅西,两个人身上都有着无与伦比的魅力,C罗就像一个隐士高手一样不断的去磨砺自己的技艺,几十年如一日的坚持做对的事情,这一点真的很让人钦佩,如果我也可以像这样去坚持的提
2022-12-04 20:50:04 379
原创 C++:switch内部的变量定义、迭代器与迭代语句、while(cin>>num)的详解、dowhile和while辨析
看书的过程中遇到这样一个switch执行流程的问题,假如现在有一个switch语句,里面有两个case:true和false,在这两个语句中因为程序的逻辑需要定义和初始化一个变量,如果在true里面定义和初始化,当控制流直接跳过true去执行false分支,说来也巧,false里面正好又要用到这个true里面定义和初始化的变量怎么办。答案是:如果在某处有一个带有初值的变量位于作用域外,在另一处该变量位于作用域之内,则从前一处跳到后一处的行为是非法的。
2022-11-24 15:40:18 1082
原创 递增运算符(++)和递减运算符(--)辨析,C++实现:使用条件运算符从vector< int >中找到奇数然后输出奇数值翻倍后的结果
在学习C++过程中免不了接触这种递增方式,,除了一些常规的自增运算外,由于很多迭代器本身不支持算数运算,这时候就需要用到递增和递减运算符,所以递增和递减这时不仅仅是计算起来简洁,更多的是必须的。
2022-11-22 15:38:45 493
原创 C++实现:简单实现一个范围for赋值数组,然后用标准库函数end和begin实现一个数组遍历
q就是指向指针的指针,p是指向二维数组中元素的指针,以下面的(2,3)数组为例子,arr有两个元素,每个元素里面有3个整数一个整数占4个字节,一个64位系统下的指针占8个字节,sizeof输出出来p是8,p是12,首先可以确定的是p是一个指针,指向的是arr的第一个元素{1,2,3},这个地址的地址也就是1这个整数的地址,当把p解引用之后p就代表了这个数组的第一个元素,也就是1,2,3这三个数,所以p的大小就是12,这时候我们就先假设。
2022-11-19 16:43:41 371
原创 C++实现:两种数组输出方法、将一个数组全部置为0、利用指针的方式置为0、比较两个数组是否相等、比较两个vector对象是否相等、一个C++字符串转换为C风格字符串时遇到的问题
所以我们回到最开始的问题,为什么只输出一个h呢,这就是因为此时的str是指向char这个字符数组的第一个字符,我们这里说的是string转换为char数组之后的char字符数组,但是为什么cout
2022-11-18 16:31:44 962
原创 C++实现:迭代器遍历替换字符串中字符、迭代器实现遍历字符串列表、迭代器实现对一个含有未知数量的vector< int>乘以2之后输出、迭代器实现二分搜索
输入的数组需要有序,对象的定义哪里使用在哪里定义。
2022-11-17 18:10:17 231
原创 C++实现:输入多个小写字符串,输出大写字符串和输入一组数,输出相邻两数之和以及改进思路
我用g++8编译的,运行结果如下:上面我写的这种实现方式总归是有点初学者味道,要想让其变得高大上起来最好的方法就是加点typedef、搞点引用、再加些指针进去,或者就直接一句话解决所有问题,要不够复杂要不就够简单,再或者外面写个头文件,把定义都丢进去,然后直接在这里用,再牛逼一点,把实现方法都丢进另一个cpp文件里面,在这直接一个fun1(),绝对没人看得懂,哈哈哈哈哈哈。
2022-11-16 21:00:23 467
原创 C++标准库类型vector介绍
和任何一种类类型一样,vector模板控制着定义和初始化向量的方法。下表列出了定义vector对象的常用方法。初始化vector对象的方法v1是一个空vector,它潜在的元素是T类型,执行默认初始化v2中包含有v1所有元素的副本等价于v2(v1),v2中包含有v1所有元素的副本v3包含了n个重复的元素,每个元素的值都是valv4包含了n个重复地执行了值初始化的对象v5包含了初始值个数的元素,每个元素被赋予相应的初始值等价于v5{a, b, c …}//默认初始化,svec不含任何元素。
2022-11-15 20:32:05 817
原创 C++11中新添加的范围for用法介绍
这段代码是书中给的,但是实际测试的时候还是遇到了一个问题,就是编译执行的时候,按回车之后程序不往下执行,而只是会换行,这个问题其实说起来很简单,就是cin不知道我是不是已经输入完毕了,我使用的是Linux编译环境,这时候应该输入ctrl+d结束输入,然后按ENTER 就可以输出想要的结果了,至于这段代码很容易读懂,我就不啰嗦了。在上述程序中,for循环使用变量index作为s的下标,index的类型是有decltype关键字决定的,首先将index初始化为0,这样第一次迭代会从s的首字符开始;
2022-11-15 00:06:53 407
原创 关于g++版本升级、devtool的使用、三个重要文件概述、bash概述的记录
关于g++版本升级、devtool的使用、三个重要文件概述、bash概述的记录
2022-11-14 20:18:06 1105
原创 C++如何处理string对象中的字符介绍
也就是说,对string对象使用加法运算符(+)的结果是一个新的string对象,它所包含的字符由两部分组成,前半部分是加号左侧对象所含的字符,后半部分是加号右侧所含的字符。这类处理的一个关键的问题就是如何获取字符本身,有时需要处理string对象中的每一个字符,另外一些时候则只需处理某个特定的字符,有时候遇到某个条件处理就要停下来。1.如果两个string对象的长度不同,而且较短string对象的每个字符都与较长string对象对应位置上的字符相同,就说较短string对象小于较长string对象。
2022-11-13 21:22:50 246
原创 C++标准库类型string的用法介绍
在这段代码中,读取对象是string而不是int,但是while语句的条件部分和之前版本的程序是一样的,该条件负责在读取时检测流的情况,如果流有效,也就是没有遇到文件结束标记或非法输入,那么执行while语句内部的操作。这段程序首先定义了一个名叫s的空string,然后将标准输入的内容读取到s中,在执行读取操作的时候,string对象会自动忽略开头的空白(空白符、换行符、制表符等)并从第一个真正的字符开始读取,直到遇见下一处空白为止。如果输入的有空格则只会输出第一个空格前的内容,输出结果不会带任何空格。
2022-11-12 23:34:38 399
原创 C++命名空间和标准库类型string
string s1;//默认初始化,s1是一个空字符串 string s2 = s1;//s2是s1的副本,也就是拿s1初始化s2 string s3 = "hi";//s3是该字符串字面值的副本 string s4(10 , 'c');//s4的内容是cccccccccc可以使用默认的方式初始化一个string对象,这样就会得到一个空的string,也就是该string对象中没有任何的字符。如果提供一个字符串字面值,该字面值中除了最后那个空字符外其他所有字符都被拷贝到新创建的string对象中去。
2022-11-11 23:14:08 441
原创 有关C++预处理和头文件的介绍
确保头文件多次包含还能安全工作的常用技术是预处理器,它由C++从C语言继承而来。预处理器是在编译之前执行的一段程序,可以部分的改变我们所写的程序,之前已经用到的一项预处理功能是#include,当预处理器看到#include标记时就会用指定的头文件的内容代替#include。C++程序还会用到的一项预处理功能是头文件保护符,头文件保护符依赖于预处理变量(2.3.2节)。预处理变量有两种状态:已定义和未定义。
2022-11-10 19:03:59 455
原创 C++常量表达式、处理类型和自定义数据结构的用法说明
从最基层理解,数据结构就是把一组相关的数据元素组织起来然后使用它们的策略和方法。例如:在Sales_item类里把图书的ISBN编号、售出量以及销售收入等组织在一起,还提供了isbn函数、>>、
2022-11-09 22:40:36 718
原创 C++语言下const限定符的详细用法介绍
有时候我们需要定义一种变量,它的值不能被改变。例如:用一个变量表示缓冲区的大小,使用变量的好处是当我们觉得缓冲区大小不合适的时候很容易对其进行调整,但另一方面也需要随时警惕防止程序一不小心改变了这个值。
2022-11-08 21:12:23 443
原创 C++复合类型以及指针的重要用法说明
/i和i2都是int类型 int & r = i , r2 = i2;//r是一个引用,与i绑定在一起,r2是int类型定义,初始值是i2 int i3 = 1024 , & ri = i3;//i3是一个int类型,初始值是1024;ri是一个引用,与i3绑定在一起 int & r3 = i3 , & r4 = i2;//r3和r4都是引用//错误:引用类型的初始值必须是一个对象,不能是一个字面值 double dval = 3.14;//错误:此处引用类型的初始值必须是int型对象。
2022-11-07 19:10:57 223
原创 C++内置类型、变量和作用域
变量定义的基本形式是:先是类型说明符,随后紧跟着一个或者多个变量名组成的列表,其中变量名以逗号分隔,最后以分号结束。为了允许把程序拆分成多个逻辑部分来编写,C++支持分离编译机制该机制允许将程序分割为若干个文件,每个文件都可被独立编译。如果将程序分为多个文件,则需要有文件间共享代码的方式。例如:一个文件的代码可能需要使用另一个文件中定义的变量,一个实际的例子就是cout和cin,它们定义于标准库,却被我们写的程序来使用。为了支持分离式编译,C++语言将声明和定义区分开来。
2022-11-06 20:24:13 289
原创 C++大型项目构造方法
首先创建一个client.h的头文件,在里面声明出来需要的函数,然后创建一个同名的源文件client.cpp,在client.cpp里面具体的去写实现这个客户端的所有函数和方法,以及连接数据库和线程处理等,然后在client.cpp里面写上#include client.h。一般大型项目都会有很多的.h文件和.cpp的功能实现文件,这样的分布式代码结构有利于分开给多人实现,最后在main函数里面分别调用其余的函数和接口就可以实现一个大型项目所需的功能。最近在学习C++相关内容,算是初学者的记录积累。
2022-11-05 11:38:35 936
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人