C++
文章平均质量分 59
yoloyyh
靡不有初,鲜克有终。
展开
-
Linux下内存泄漏定位工具Valgrind介绍
Valgrind 是Linux平台下一系列的调试和分析工具的工具组,具体包括以下工具:1、Memcheck:内存错误检测器,常用于检测C/C++编写的程序,是否还有内存泄漏、堆栈溢出等内存的错误;2、Cachegrind:缓存和分支预测分析器,可以帮助程序优化,运行得更快;3、Callgrind:生成缓存的调用图分析器;4、Helpgrind:线程错误检测器,可以帮助多线程程序更正确;5、DRD:也是一个线程错误检测器,与Helpgrind相似但是使用了不同的分析技术,可以发现不同的问题;原创 2023-03-20 22:23:17 · 1390 阅读 · 0 评论 -
一文搞懂C++的智能指针
所谓的智能指针,其实是一个类,类的对象在离开作用域时会自动调用析构函数,利用这一特性达到自动释放内存,避免内存泄漏。原创 2022-11-21 08:00:00 · 239 阅读 · 0 评论 -
函数调用约定
目录一、函数调用约定的作用二、stdcall三 、cdecal四、fastcall一、函数调用约定的作用函数调用是由栈这种存储结构来实现的,但是这里面涉及几个问题,比如下面的函数:int add(int a, int b) { return a + b;}int main { add(1, 2); return;}(1)参数的入栈顺序怎么保证?是先 a 后 b,还是先 b 后 a?(2)函数调用结束后,谁来负责恢复栈顶指针?函数调用约定原创 2021-12-22 19:55:32 · 660 阅读 · 0 评论 -
STL中vector插入元素迭代器失效问题
目录一、capaticy()容量不足时,尾部插入元素结论一:二、capaticy()容量充足时,尾部插入元素结论二:三、capacity()容量充足时,中间位置插入元素结论三:STL中vector的内存由三个指针进行管理:_M_start,_M_finish,_M_end_of_storage,所有关于地址,容量大小等操作都需要用到这三个指针。STL源码中关于这三个指针的使用如下:iterator begin() _GLIBCXX_NOEXCEPT { retu原创 2021-09-30 15:37:06 · 1427 阅读 · 0 评论 -
利用注册类实现特定类型匹配函数模板
函数模板可以让不同的类型调用功能相同的代码,可以减少代码的冗余,但是如果只想让特定类型使用函数模板呢?可以利用模板特化和注册类实现。代码如下:#include <iostream>template <typename T>struct Register{};template <>struct Register<int> { typedef int Type; constexpr static const char* TypeNam原创 2021-09-13 15:40:03 · 139 阅读 · 0 评论 -
动态规划之01背包与完全背包
目录一、01背包问题描述:解题思路:二、完全背包问题描述:解题思路:一、01背包问题描述:有一个背包,背包总的承载重量是 Wkg,有 n 个物品(每个物品只有一件),每个物品的重量不等,并且不可分割。在不超过背包所能装载重量的前提下,如何让背包中物品的总重量最大?之所以叫做01背包是因为物品要么装(只能装1次)要么不装(0)。解题思路:利用动态规划思想,假设dp[i][j]表示前i件物品背包容量为j的情况下所能装的最大重量,v[i] 表示第i件物品的价值,w[原创 2021-08-25 10:31:03 · 123 阅读 · 0 评论 -
C++ 堆、栈和内存管理
一、stack(栈)存在于某作用域的一块内存空间,一般用来存放局部变量值、函数参数值。当调用函数,函数本身就会形成 stack 用来放置它所接收的参数,以及返回地址;class Complex {public: int x;};void func() { Complex c1; // 作用域仅存在于func函数内}栈上的对象的生命周期只存在于生命周期,离开了作用域就会调用析构函数;二、heap(堆)由操作系统提供的一块全局的内存空间,程序可动态分配内存原创 2021-08-11 10:56:03 · 334 阅读 · 0 评论 -
C语言标准IO函数整理
目录一、简介二、常见的标准IO函数一、简介常见的IO函数分为两类,分别是标准IO和系统IO,具体的区别和联系为:不同系统的系统IO有区别,而标准IO是任何平台通用的; 标准IO是依赖于系统调用IO实现的; 标准IO吞吐量大,文件IO响应速度快; 标准IO与文件IO不可混用。二、常见的标准IO函数FIFE *fopen(const char *path, const char *mode);/*path: 打开文件路径mode: 打开文件模式*/int fclos原创 2021-07-27 14:52:16 · 3054 阅读 · 0 评论 -
C++ goto语句的使用
简介:关于goto语句的使用,之前只知道goto可以跳转到对应的语句块,可以向前跳转,也可以向后跳转,但即使没有goto,执行到对应的语句块,该语句块也会继续执行。测试代码:int main() { size_t lem = 1; if (lem == 0) goto f; std::cout << " begin" << std::endl;f: lem *= 4; std::cout <&l.原创 2021-07-19 17:41:36 · 645 阅读 · 0 评论 -
转换函数与explicit
简介:转换函数分为两类,一种是转出,把自己转换成别的类型,一种是转入,把别人转成自己类型,当两种都存在时,就可能会有歧义,造成编译器无法识别,这时候就需要explicit关键字。测试代码:先看类的结构:class Fraction {public: Fraction(int num, int den = 1) : m_num(num), m_den(den) { //转入 std::cout << "constructor funtion have原创 2021-07-16 09:37:56 · 126 阅读 · 0 评论 -
Linux下map、hash_map、unordered_map性能比较
转载地址:https://blog.csdn.net/whizchen/article/details/9286557原理介绍map介绍Map是STL[1]的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所原创 2021-07-15 10:25:00 · 568 阅读 · 0 评论