C++笔记
无
Ember_Sky
这个作者很懒,什么都没留下…
展开
-
VS 提示错误: cout 不明确
vs写代码时突然出现错误: cout 不明确环境:各种头文件没问题。直接声明名称空间 using namespace std;解决方法:先把 using namespace std; 这句给注释掉,等一会之后, 再取消注释。然后就好了综上所述, 计算机是一门玄学!!!...转载 2020-04-29 19:27:50 · 2711 阅读 · 0 评论 -
C++ STL迭代器失效的几种情况
C++ STL迭代器失效的几种情况转自大神博客数组型数据结构:该数据结构的元素是分配在连续的内存中,insert和erase操作,都会使得插入点和删除点之后的元素变动位置,所以,插入点和删除掉之后的迭代器全部失效,也就是说insert(*iter)和erase(*iter)之后进行iter++是错误的。解决方法:erase(*iter)的返回值是下一个有效迭代器的值iter =cont.erase(iter);链表型数据结构:对于list型的数据结构,使用了不连续分配的内存,删除运算原创 2020-08-20 21:46:18 · 217 阅读 · 0 评论 -
const char * 、char const *、 char * const 三者的区别
const char * 、char const *、 char * const 三者的区别可以参考大神博客,点击前往假设 p 指针指向的内容是 strconst char *p = str :是定义一个指向字符常量的指针p 自身的值可以修改不能通过 p 修改 p 指向的值(也就是str的值)可以通过 str 修改自身的值char const *p :同上char * const p :是定义一个指向字符的指针常量p 自身的值不能修改可以通过 p 修改 p 指向的值(也就是str的值)原创 2020-08-20 21:39:02 · 143 阅读 · 0 评论 -
static关键字的用法
static关键字的使用地方静态局部变量静态全局变量静态函数静态数据成员(class里的变量用)静态成员函数(class里的函数用)区别:可以参考大神博客,点击前往访问权限同类型的可以相互访问静态成员函数不能访问非静态(包括成员函数和数据成员)非静态可以访问静态原因: 静态不知道有几个非静态,非静态一直知道静态(只有一个)...原创 2020-08-20 21:30:04 · 68 阅读 · 0 评论 -
C++中数据存储的位置
C++中数据存储的位置转大神的博客,原文链接一个由 c/c++编译过的程序占用的内存分为以下几个部分:栈区: 就是那些由编译器在需要的时候分配,在不需要的时候自动清除的变量的存储区。里面的变量通常是局部变量、函数参数等。堆区(动态内存分配): 通过new和malloc分配,由delete或free手动释放或者程序结束自动释放。动态内存的生存期人为决定,使用灵活。缺点是容易分配/释放不当容易造成内存泄漏,频繁分配/释放会产生大量内存碎片。若程序员不释放,程序结束时可能由OS(操作系原创 2020-08-20 21:09:56 · 785 阅读 · 0 评论 -
C++使用cout输出多种进制
C++使用cout输出多种进制 cout << oct;//接下来输出的都是八进制 cout << 13 << endl; cout << dec;//接下来输出的都是十进制 cout << 13 << endl; cout << hex;//接下来输出的都是十六进制 cout << 13 << endl; /*********************** *输出:原创 2020-08-20 20:50:50 · 588 阅读 · 0 评论 -
关于C++ string的c_str函数
关于C++ string的c_str函数先看代码:#include <iostream>#include <string>using namespace std;int main(){ string s = "abc"; const char* p = s.c_str(); cout << p << endl; // 输出:abc s = "xyz"; cout << p << endl; // 输出:居然是xyz原创 2020-08-03 14:32:57 · 253 阅读 · 0 评论 -
C++STL的sort函数源码详解
C++STL的sort函数源码详解说一下我由衷的对C++感到钦佩的时刻第一次是在我看到一个对max函数的分析其中分析了#define max(a,b) a>b?a:b#define max(a,b) (a)>(b)?(a):(b)#define max(a,b) ((a)>(b)?(a):(b))等各种情况,我当时在想,还能这么玩儿?最近一次就是在看到了C++中sort函数的源码分析,我的天,这设计绝对称得上惊艳转一个大神博客,转一个大神博客,转一个大神博客这博客在各原创 2020-08-23 22:57:24 · 4384 阅读 · 1 评论 -
关于C++标准库中的sort函数
参考资料,点击前往C++里面的sort简单理解就是一个快排,但是要仔细分析,他其实集成了插入排序、堆排、快排三种排序各自的优点在数据量很大的时候,使用快排在递归过程中,分段之后的数据量小于某个值(或者原本数据量就很小)的时候,使用插入排序在递归过程中,如果递归层次过深,分割行为有恶化倾向时,它能够自动侦测出来,使用堆排序来处理,在此情况下,使其效率维持在堆排序的O(N logN),但这又比一开始使用堆排序好我简单猜一下这么设计的原因:为什么要选用快排为什么要引入插入为什么要引入堆排原创 2020-08-22 21:11:51 · 787 阅读 · 0 评论 -
C++的STL中emplace_back与push_back的区别
C++的STL中emplace_back与push_back的区别点击前往更详细的大神博客emplace_back到底比push_bash快在哪里?emplace_back() 和 push_back() 的区别,就在于底层实现的机制不同。push_back() 向容器尾部添加元素时,首先会创建这个元素,然后再将这个元素拷贝或者移动到容器中(如果是拷贝的话,事后会自行销毁先前创建的这个元素)而 emplace_back() 在实现时,则是直接在容器尾部创建这个元素,省去了拷贝或移动元素的过程。原创 2020-08-20 22:34:37 · 428 阅读 · 0 评论 -
侯捷C++面向对象高级编程02笔记
只是简单的记录了一下,并没有好好整理。原创 2020-10-23 11:07:12 · 92 阅读 · 0 评论 -
C++重载、重写和重定义
重载拥有相同的函数名字,但是参数类型、个数等其他因素不同的表现形式是两种函数同时存在重写(覆盖)子类重新写了一个函数,与父类的一个函数具有相同的函数名、参数列表等父类函数需加 virtual 关键字两种函数,但是不会同时存在。隐藏与重写相同,但是父类函数没有 virtual 关键字...原创 2020-10-22 18:17:10 · 125 阅读 · 0 评论 -
C++三大特性
三大特性:继承、封装、多态本人通俗的理解继承一种class拥有另一种类的全部特点和操作(在public下)封装将一些客观的东西写成一个class,其中包括1、这种东西的一些特点,class的成员变量2、这种东西的一些操作,class的成员函数多态通过继承和虚函数实现一个对象的成员函数在不同的场景调用的实际函数是不同的简单说就是表面上调用的函数名字是一样的,但是实际上进行的操作是不一样的有空再继续补充...原创 2020-10-22 18:09:05 · 110 阅读 · 0 评论 -
侯捷C++面向对象高级编程01笔记
只是简单的记录了一下,并没有好好整理。原创 2020-10-21 15:58:28 · 124 阅读 · 0 评论 -
C++关于使用memcmp判断结构体是否相等的隐患问题
memcmp基本知识memcmp就是将两个变量在底层按字节进行比较,相等返回0,不等返回非0其他详细知识可以参考大佬博客结构体structC++除了除了比较高级的class之外,还有跟他很像的struct,但是如何比较两个结构体是否相等呢(结构体的每个变量都相等),这时候很容易想到了c里面的memcmp函数。经检验,在使用memcmp比较结构体的时候,有个问题:有时候明明两个结构体的所有变量都是一样的,返回的还是非0。找到原因找了很多博客之后,都说和字节对齐有关,之前看过字节对齐,还是不懂为什原创 2020-09-26 18:03:20 · 1177 阅读 · 0 评论 -
C++中new与malloc的10点区别
C++中new与malloc的区别参考、转自大佬博客new很容易导致内存泄漏,关于内存泄漏的详解,请点这里简单总结一下1、申请内存的所在位置new操作符从自由存储区(free store)上为对象动态分配内存空间自由存储区可以是堆,也可以是静态存储区malloc函数从堆上动态分配内存2、返回类型安全性new操作符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操作符。malloc内存分配成功则是返回void* ,需要通过强制类原创 2020-08-27 16:24:27 · 144 阅读 · 0 评论 -
C++中的内存泄漏
C++中的内存泄漏参考、转载自大神博客1、new(malloc)和delete(free)没有配套使用在堆里创建了对象占用了内存,但是没有显示地释放对象占用的内存这种是最简单,最直接的内存泄露,很容易发现2、类的构造函数和析构函数中new等没有配套使用在类的构造函数中动态的分配了内存,但是在析构函数中没有释放内存或者没有正确的释放内存3、没有正确地清除嵌套的对象指针如下: int* a = new int; int** b = new int*; *b = a;这样的情况下,原创 2020-08-27 15:49:22 · 605 阅读 · 2 评论 -
野指针与悬空指针
野指针与悬空指针参考、转载出处1、野指针:这个指针没有具体的指向一般来自未初始化的指针1、悬空指针:指的是之前给指针分配过空间,后来将空间释放了,但是指针依旧指向那个空间...原创 2020-08-27 12:28:44 · 229 阅读 · 0 评论 -
关于C++字节对齐
关于C++字节对齐大神博客1:介绍的简单明了,例子很容易理解大神博客2:从地址层面介绍,例子很容易理解偏移量:变量的地址相对于起始地址的偏移量普通变量的偏移量必须为下面的倍数 sizeof(char) :1 sizeof(short) :2 sizeof(int) :4 sizeof(long) :4 sizeof(long long) :8 sizeof(char*) :4/8(指针:32位是4,64位是8) sizeof(float) :4 sizeof(doub原创 2020-08-26 11:33:33 · 88 阅读 · 0 评论 -
C/C++编译过程
C/C++编译过程转自大神博客1转自大神博客2转自大神博客3过程主要有四个:编译预处理(Preprocessing)编译、优化阶段(Compilation)汇编过程(Assemble)链接程序(Linking)1. 编译预处理(Preprocessing)预处理用于将所有的#include头文件以及宏定义替换成其真正的内容将.c 文件转化成 .i文件2. 编译、优化阶段(Compilation)将经过预处理之后的程序转换成特定汇编代码(assembly code)的过程将.c原创 2020-08-25 12:00:00 · 335 阅读 · 0 评论 -
C++11常用特性总结
C++11常用特性总结转自大神博客关键字及新语法1.1、auto关键字及用法1.2、nullptr关键字及用法1.3、for循环语法C++11常用特性总结2.1、std::array2.2、std::forward_list2.3、std::unordered_map2.4、std::unordered_set多线程3.1、std::thread3.2、st::atomic3.3、std::condition_variable智能指针内存管理4.1、std::shared_原创 2020-08-25 11:39:06 · 80 阅读 · 0 评论