![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
文章平均质量分 87
c++的基本知识
小C您好
无限进步,无限创新
展开
-
string刷题(1~4)
因为字符串末尾不以空格结尾, 我们可以用rfind来查找最后一个空格,利用rfind找不到返回npos作为判断条件string s;cin >> s;if(pos!else注意这里输出单词要去掉空格,也就是-1。记住,两个下标相减,得到的长度是一个左闭右开的区间。但这段代码是有问题的,我们都知道scanf遇到空格或\n会停止,cin也是如此,为了避免这一问题,我们可以使用c++的getline函数,这样就可以将string以整行的方式输出了。第一个可以自定义结束标志,换行为通用结束标志。原创 2023-05-29 20:27:30 · 71 阅读 · 4 评论 -
STL——string模拟实现(一)
的数据时,它所调用的。原创 2023-06-03 10:45:36 · 268 阅读 · 1 评论 -
String模拟实现(二)
resize的特点是,如果所给的长度小于空间大小就会删除多余的数据。前面我们实现了reserve,但有这样一个问题,如果reserve的长度小于空间就会导致缩容,而我们知道,string中缩容用的是,而。可以看到出现了容量小于size的情况,这样在拷贝的时候就会越界并在析构时出错,我们加上判断就可以了。对比reserve,它们的共同点都是不对capacity产生影响,这种以我们实现前先看段代码:这段代码说明了什么问题呢?答。原创 2023-06-07 10:52:51 · 629 阅读 · 0 评论 -
C++入门(三)(重载)
函数重载是指在内定义两个或多个函数,它们的函数名相同但参数列表不同,可以是或的不同组合。这样做的好处是可以使用来表示不同的操作,提高了代码的可读性和可维护性。这里我写了int和double不同类别的加法,可以看到函数名相同,类型不同,编码后可以运行。其他的大家可以自行去尝试。注意的是,在同一作用域下这样重载是有效的,不同作用域需要谨慎使用。函数重载不会直接降低程序运行速度,因为编译器会根据不同的函数参数类型或数量自动生成不同的函数名,使得程序在调用函数时能够准确地匹配到对应的函数。原创 2023-04-26 14:27:32 · 51 阅读 · 1 评论 -
C++ 日期类(运算符重载应用)
可以看到可以通过这种方式改变了地址,但其实只是改变了输出结果,通过调试还是能看到真实地址。注意这里const取地址重载后要加const构成重载。原创 2023-05-14 10:21:42 · 252 阅读 · 4 评论 -
C++(类和对象)——中篇
定义一个日期类。原创 2023-05-06 17:24:58 · 67 阅读 · 2 评论 -
C++入门(二)缺省与cin&cout
我们在打印“helloworld”的时候会发现" << "的符号,这就是c++的流插入运算符,与之相对的,还有流提取“ >> ” 运算符,注意与c语言的左移和右移运算符区别开来,一个是对数操作,一个是进行IO操作。通过使用缺省值,我们可以让函数在不同的情况下有不同的行为,同时又避免了重复的代码。为什么呢,因为包含头文件的时候你只包含了声明的部分,而你却在定义函数时给缺省,这样可能会出错。,一般我们直接在函数声明时给缺省,所以只需考虑常量这点即可,注意,这里的常量指的不是形参是常量,而是形参的值是常量。原创 2023-04-29 21:14:18 · 118 阅读 · 4 评论 -
C++类和对象(下篇)
我们说过,自定义类型初始化会调用自身的默认构造(无参,全缺省,编译器默认生成),那如果我不是默认构造怎么办呢?不能在声明的时候传递参数吧 ,那是定义的法子,所以这时初始化列表就尤为重要。声明类B可以看到成功调用了B的构造函数,接下来去掉缺省我们就利用起来我们的初始化列表,既然你不让我在声明的时候定义,我就在定义的地方定义成功运行接下来看一段稍微有点绕的代码,看完后希望能对其有个深刻的认识class Bpublic::_a(2)_a = num;原创 2023-05-18 21:30:05 · 93 阅读 · 5 评论 -
C++内存管理
的作用。原创 2023-05-20 21:10:46 · 79 阅读 · 5 评论 -
深入拷贝构造
默认生成构造和析构:1.内置类型不做处理2.自定义类型回去调用对应构造/析构默认生成拷贝构造和赋值重载:1.内置类型实现浅拷贝(按字节依次拷贝)2.自定义类型去调用这个成员的构造/赋值重载通过这次测试,希望大家对拷贝构造有更深的认识,拷贝构造的出现场景在我的类中篇有提到,这里不多赘述。推荐:尽可能传引用传参和引用返回可以在一定程度上减少拷贝。原创 2023-05-10 18:04:30 · 48 阅读 · 0 评论 -
STL——string(二)
前面我们简单介绍了string的一些常用成员函数,今天我们接着选择性地讲解string类,不常用的不代表没用,我们得知道,常用的是必须掌握的。 除了用size()遍历数组,这里我简单介绍一下用迭代器访问数组每个元素的操作,也为我们后面的学习做铺垫。iterator作为一个独立的类型,需要指定string::才能被解析成string内部的迭代器。这里的begin和end我们先肤浅地理解为指针,大概像下图这个样子。 除了用这种方式,我们还可以用范围for,底层还是迭代器。反向遍历通过反向迭代器的方式实现原创 2023-05-28 18:21:09 · 145 阅读 · 4 评论 -
STL——string(一)
需要注意的是,如果resize的大小n小于原来的大小,将会只保留前n位,所以我们看到就算给st1传递了字符a但却没有任何意义。注意s5和s6调用的是不同构造函数,s5是我们刚才介绍的第3个构造函数,不推荐像这样写,最好按照标准来写,以免发生混淆。这里有一张c++98的string类的构造函数表,对于string和后续STL的学习,我的讲解方式是。没错,它们就是一样的,感兴趣的可以了解一下这方面的演变过程,日常用size即可。,它会重新分配一块更小的内存,再将内容复制到新的空间,并释放原来的空间。原创 2023-05-25 18:02:11 · 74 阅读 · 5 评论 -
C++ 运算符重载
进行重载。给定一个日期类,我们先在全局定义来看看它的作用运行结果。原创 2023-05-12 17:54:07 · 47 阅读 · 0 评论 -
C++(类和对象)——上篇
/类体类的关键字是class,后面跟着类名,里面可以是成员函数和成员变量,类中允许函数和变量声明一起定义,类中定义的变量或函数可以不考虑顺序。test.cpp有几个点需要注意:1.分离时注意头文件的包含2.注意缺省只能在声明时给3.如果想在类外定义成员函数,则需加上““ 的形式,告诉编译器这是类里面的函数而非全局函数4.注意类结束后的;我们将struct换成class后我们发现编译不通过,这是因为类中存在访问限定符的概念。访问限定符分为public(公有),private。原创 2023-05-05 11:30:24 · 51 阅读 · 2 评论 -
C++入门(四)引用
水浒传一百单八将都外号有自己的外号,引用可以理解为取外号。int a = 0;int& s = a;int b = a;a++;//调试,取地址s++;//测试别名是否会改变原数//给别名取别名//此时用printf比较舒服在这段代码中,我们定义了三个变量,a,s,b,其中s是a的引用,输出:a=2 b=0a=2 b=0那能否给指针取别名呢?当然可以,通过调试,发现三者都指向同一块空间。也就是说,对别名或者原变量的操作是同时发生的,你变我也变,你有我就有。原创 2023-04-29 17:28:50 · 72 阅读 · 2 评论 -
c++入门(命名空间)
本节介绍了c++“helloworld”的打印和三种命名空间展开方式,分别是:1.指定命名空间展开2.全局展开3.部分展开在一些复杂的环境中是不推荐全局大量展开的,需要注意的是不同展开方式的特点以及适用场景。原创 2023-04-17 16:01:48 · 51 阅读 · 1 评论 -
泛型编程——模板入门
注意类模板的声明和定义分离有点不一样,它们只能放在同一个文件里,否则会发生链接错误。~Vector();//声明template //定义这里要注意定义要在第一行跟上模板的定义且Vector后要加上构成完整类型,一般不推荐将声明和定义分离。这就是模板初阶的基本内容了,之后我们还会谈进阶模板,不要忘了一键三连啊!原创 2023-05-21 16:15:43 · 86 阅读 · 6 评论 -
C++入门(五)内联,auto
/主程序int main()Add(1,2);return 0;分离后会出现链接错误,这是因为inline是优化后的函数,他不会去调用函数栈帧,自然在链接过程中无法找到函数地址,即无法链接上test.cpp的内容,因为就没有产生相应的符号表。所以推荐直接在.h文件定义。原创 2023-05-05 10:54:17 · 123 阅读 · 2 评论