C/C++
文章平均质量分 56
C/C++的各种知识
cool6736473
世界上只有一种英雄主义,那就是认清生活的真相后依旧热爱生活。
展开
-
C++:左值和右值
右值通常表示临时对象或者那些即将被销毁的对象,它们没有持久的存储期,因此不能被取地址。右值通常出现在赋值操作的右侧,并且它们的值在表达式求值结束后就不再需要了。如一个函数传入一个string对象的引用,但是在传入参数时传入一个substr,substr的返回值为一个临时变量,没有地址,无法作为函数参数传入。左值表示的是对象在内存中的位置,因此它们有持久的存储期,可以通过取地址操作符。左值通常表示一个具体的对象或变量的身份,它们可以出现在赋值语句的左边,因为它们的值可以被改变。int x = 10;原创 2024-04-02 20:01:41 · 204 阅读 · 0 评论 -
算法——搜索:两个水壶得到指定容积的水,哈希表hash_function
第一个模板参数指定集合中元素的类型为PII,而第二个模板参数 decltype(hash_function) 指定了哈希函数类型,即使用之前定义的 hash_function。即 auto hash_function = [](const PII& o) {return hash<int>()(o.first) ^ hash<int>()(o.second);因此,这段代码的目的是创建一个无序集合 seen,用于存储PII类型的对象,并使用自定义的哈希函数来计算元素的哈希值。需要使用哈希表去重。原创 2024-04-01 21:27:56 · 429 阅读 · 0 评论 -
C++优先队列——priority_queue,函数对象,labmda表达式,pair等
头文件:#include内部使用堆来实现,在需要或得最大的几个值或最小的几个值而不关心整个数组的顺序时非常好用。原创 2024-03-28 18:54:51 · 2186 阅读 · 0 评论 -
关于vector的size,unsigned int类型
原因:nums.size()为无符号整数类型,无符号整数类型与int类型加减后结果仍然为无符号整数类型,所以会变成一个很大很大的正直(约为int最大值的二倍)。代码中,循环判断结束条件为nums.size()-length,可是一直报错,数组下标错误。正确应使用一个int临时变量记录该值,在循环判断中使用临时变量。实战中要注意此点,注意函数的返回值类型,防止溢出。平时写代码很少注意溢出,这次被遇上了。原创 2024-03-25 21:29:32 · 179 阅读 · 0 评论 -
memset函数
对于int数组,int占四个字节,假设value为2,虽为int类型,取出最后一个字节为00000010,将此字节复制到目标内存中,对于每一个数组中的元素,变为00000010000000100000001000000010,因此无法正确初始化。对于int数组,仅能正确初始化为两种值:0和-1(这两个值对应的二进制高位和地位完全相等,00000000000000000000000000000000,11111111111111111111111111111111)。可以用于初始化内存块为任意字节值。原创 2024-01-17 14:54:24 · 342 阅读 · 0 评论 -
函数参数传递指针的问题
此时若有一个局部变量a=3,在函数中执行pp=&a,即让形参pp指向a所在的地址,那么在函数内部pp的值不再为0x0121E680,而是变为了a的地址,可是实参p指向的内存区域并没有发生改变,pp只是p的一个副本,当函数结束之后返回时,原来的实参p并没有改变,因为p所指向的内存地址始终没有变,变的是函数内形参指向的内存地址,当函数调用结束后,该内存被释放,导致实参没有改变。若形参改变数组中某一个数据的值,由于形参和实参此时指向的是同一块内存区域,实参的改变会导致形参的改变,函数返回后数组中该值仍然被改变。原创 2024-01-19 11:33:05 · 444 阅读 · 1 评论 -
拷贝构造函数参数不允许传值
原因:若允许传入值,则在参数传递时会继续调用拷贝构造函数,形成无限递归。来自剑指offer p24。原创 2024-01-17 10:51:35 · 371 阅读 · 0 评论 -
虚继承和虚函数
刚刚看了虚继承和虚函数的原理,为了防止遗忘在此浅浅记录。为了防止菱形继承,例如公共父类A,A中有成员int a,B继承A,C继承A,D同时继承B和C,则D中含有两份a,一份来自B,一份来自C,使用时除非指定是哪个,如D dd; dd.B::a = 1; dd.C::a = 2;如果使用虚继承,class B :virtual public A,class C :virtual public A,则B,C会创建一个虚基表指针指向虚基表(A),在D中,含有4个区域,B,C区域,这两个区域含有原创 2024-01-16 15:54:53 · 358 阅读 · 1 评论