C++语法
文章平均质量分 61
VioletEvergarden丶
校招冲冲冲
展开
-
2021 C++ unordered_map和vector在不同编译器下扩容机制
unordered_map和vector在不同编译器下扩容机制vector扩容情况unordered_map扩容情况vector扩容情况VS2019:1.5倍扩容g++:2倍扩容unordered_map扩容情况VS2019:初始为8,8的倍数进行扩容。g++:以13开始,2倍多一点进行扩容...原创 2021-09-17 21:46:42 · 2229 阅读 · 1 评论 -
C++智能指针与虚析构
智能指针与虚析构虚析构智能指针注意智能指针与普通指针的转换问题虚析构众C++er所周知,在多态发生时,如果父类的虚函数不是虚函数的话,子类指针指向父类对象,在其生命周期结束进行delete时,子类对象只会调用父类的析构函数,子类自己的析构函数无法调用导致内存泄露的风险。只有声明父类析构为虚函数才能按序正常进行。下面简单的代码验证:#include<iostream>#include<memory>using namespace std;class A {publ原创 2021-08-31 21:39:18 · 1010 阅读 · 0 评论 -
C++ getline的两种用法
C++ getline的两种用法读取键盘含有空格的输入getline字符流来分割字符串cin.getline()读取键盘含有空格的输入当 cin 读取数据时,它会传递并忽略任何前导白色空格字符(空格、制表符或换行符)。一旦它接触到第一个非空格字符即开始阅读,当它读取到下一个空白字符时,它将停止读取。以下面的语句为例:#include <iostream>#include <string> // Header file needed to use string objects原创 2021-07-01 16:59:39 · 4713 阅读 · 7 评论 -
C++如何创建列数不定的“二维”数组
C++ vector突然发现大神定义写法如下:vector<int> e[10];猛一下没反应过来,这是什么意思?后面还有:e[0].push_back(1);e[0].push_back(2);e[0].push_back(3);哦懂了,这是创建了一个vector< int >类型的数组,即数组里面的放了10个vector太强了,这种写法的厉害之处在于,不用像二维数组那样浪费不需要的空间下面附上完整测试代码#include<iostream>原创 2021-06-28 20:37:49 · 1819 阅读 · 2 评论 -
采坑记录-C++关于++i,i++,i=i+1,i+=1之间的区别于性能分析
++,+=,+之间性能对比内置类型自定义类型i++和++ii=i+1和i+=1起因:在leetcode上一道有关字符串的题,代码流程与答案一样,但是无法通过最后一个案例,显示超时,最后一个未通过的案例为一个长50000的string,经过调试,发现循环内有两步为:str=str+String[i],将这一步改为+=就可以通过了。。。内置类型对于C++内置类型而言,如int,double等,++i,i++,i=i+1,i+=1这四种操作的效率是没有区别的在VS2019中,可以通过调试里面的窗口,原创 2021-06-23 09:26:22 · 1148 阅读 · 1 评论 -
C++11 enable_shared_from_this<>与shared_from_this()
智能指针的有关函数使用注意智能指针分类shared_from_this()函数demo测试是否真正理解智能指针分类unique_ptrunique_ptr是个独占指针,C++ 11之前就已经存在,unique_ptr所指的内存为自己独有,某个时刻只能有一个unique_ptr指向一个给定的对象,不支持拷贝和赋值。#include <iostream>#include <string>#include <memory>#include <vecto原创 2021-04-27 21:16:44 · 369 阅读 · 0 评论 -
C++函数指针与虚函数指针对私有虚函数进行访问
C++函数指针与虚函数指针对私有虚函数进行访问虚函数表与虚函数指针函数指针通过虚函数表指针访问虚函数虚函数表与虚函数指针(图片来自侯捷老师)虚函数表的首地址即为类对象的起始地址存放的指针,该指针即为虚函数表指针,指向虚函数表虚函数表中每一项都是一个指向虚函数地址的指针,非虚函数不在表中函数指针它其实就是一个特殊的指针,它用于指向函数被加载到的内存首地址,可用于实现函数调用。听上有点像函数名,函数名也是记录了函数在内存中的首地址,加()就可以调用。函数指针就是一种特殊的指针。如果原创 2021-04-26 19:45:37 · 476 阅读 · 2 评论 -
C++ sizeof strlen 内存对齐 代码解释
sizeof strlen 详细用法sizeof定义内存对齐代码详解sizeof定义关于sizeof运算符,《c++ primer》在139页中是这样说明的:对char或者类型为char的表达式执行sizeof运算,结果得1;对引用类型执行sizeof运算得到被引用对象所占空间的大小;对指针执行sizeof()运算得到指针本身所占空间的大小;对解引用执行sizeof()运算得到指针指向的对象所占空间的大小,指针不需要有效。在sizeof的运算对象中解引用一个无效指针仍然是一种安全的行为,因原创 2021-04-21 15:34:35 · 350 阅读 · 6 评论 -
C++为何需要静态成员函数
C++为何需要静态成员函数结论静态成员变量和静态成员函数如何访问静态成员结论先说结论:类有时需要一个与类有关但与所有对象没有直接关系的属性一般情况下,如果有N个同类的对象,那么每一个对象都分别有自己的成员变量,不同对象的成员变量各自有值,互不相干。但是有时我们希望有某一个或几个成员变量为所有对象共有,这样可以实现数据共享。可以使用全局变量来达到共享数据的目的。例如在一个程序文件中有多个函数,每一个函数都可以改变全局变量的值,全局变量的值为各函数共享。但是用全局变量的安全性得不到保证,由于在各处都可原创 2021-04-19 16:09:06 · 531 阅读 · 0 评论 -
C++ pair如何输入
上午做了一到前K个高频字符,要求输出索引我一看,好家伙,这不是力扣原题嘛,直接小根堆就行了然后,要输入键值对,发现竟然不会输入。。。。平常力扣刷多了cin都不会使了。记录一下如何输入pair#include <iostream>#include <vector>#include <utility>using namespace std;int main(void){ vector<int> m_vecMain; vector<p原创 2021-04-18 18:58:30 · 1028 阅读 · 0 评论 -
C++语法专题二:析构函数
C++析构函数析构函数的作用析构函数的作用析构函数的作用并不是删除对象,而是在撤销对象占用的内存之前完成一些清理工作,使这部分内存可以被程序分配给新对象使用。程序设计者事先设计好析构函数,以完成所需的功能,只要对象的生命期结束,程序就自动执行析构函数来完成这些工作。具体地说如果出现以下几种情况,程序就会执行析构函数:如果在一个函数中定义了一个对象(它是自动局部对象),当这个函数被调用结束时,对象应该释放,在对象释放前自动执行析构函数。static局部对象在函数调用结束时对象并不释放,因此也不原创 2021-03-27 21:11:51 · 139 阅读 · 0 评论 -
C++语法专题一:默认构造函数,拷贝构造函数,初始化列表
C++ 构造函数C++ 构造函数构造函数作用构造函数分类初始化列表构造的优势拷贝构造函数浅拷贝与深拷贝C++ 构造函数构造函数作用该类对象被创建的时候,编译系统对象分配内存空间,并自动调用该构造函数,由构造函数完成成员的初始化工作,故:构造函数的作用:初始化对象的数据成员。构造函数分类无参构造函数带默认值的构造函数有参(无默认值)的构造函数复制构造函数(拷贝构造函数)#include <iostream>using namespace std; class原创 2021-03-27 20:57:50 · 276 阅读 · 0 评论