
C++
为你挡风遮雨
这个作者很懒,什么都没留下…
展开
-
利用C++11提供的std::thread类来创建线程
利用C++11提供的std::thread类来创建线程#include <stdio.h>#include <thread>void threadproc1() { while (true) { printf("I am New Thread 1!\n"); }}void threadproc2(int a, int b) { while (true) { printf("I am New Thread 2!\n"); }}int main(){原创 2021-07-18 11:13:55 · 386 阅读 · 0 评论 -
细谈C++智能指针
C++智能指针提出的本意是内存泄漏的背景,不想手动去管理内存,交给一个类去管理,当类离开自身的作用域时会自动调用析构函数,释放已申请的内存。auto_ptr所有的智能指针类均被定义与头文件中两个基本的初始化方式:// 方式1std::auto_ptr<int> sp1(new int(1));// 方式2std::auto_ptr<int> sp2;sp2.reset(new int(1));智能指针(smart pointer)sp1和sp2均持有一个在堆原创 2021-07-14 14:36:40 · 195 阅读 · 0 评论 -
C++中STL的优先级队列(priority_queue)的关键源码与测试
priority_queue的关键源码template <class T, class Squence = vector<T>,class Compare = less<typename Sequence::value_tyoe>>class priority_queue{...protected: Sequence c; // 底层容器 Compare comp; // 元素大小比较标准public: bool empty() const {re原创 2021-06-30 16:13:12 · 248 阅读 · 0 评论 -
C++用vector容器实现堆的相关算法
C++用vector容器实现堆的相关算法#include <iostream>#include <algorithm>#include <vector>using namespace std;int main() { vector<int> v = {0, 1, 2, 3, 4, 5, 6}; make_heap(v.begin(), v.end()); // 以vector为底层容器构造大根堆(底层是完全二叉树) for (auto i :原创 2021-06-30 15:43:42 · 241 阅读 · 0 评论 -
实现智能指针shared_ptr
智能指针shared_ptr代码实现template<typename T>class SharedPtr{public: SharedPtr(T* ptr = NULL):_ptr(ptr), _pcount(new int(1)) {} SharedPtr(const SharedPtr& s):_ptr(s._ptr), _pcount(s._pcount) { (*_pcount)++; } SharedPtr<T>&原创 2021-06-29 19:12:52 · 118 阅读 · 0 评论 -
CMake的使用
CMake简介CMake是一种跨平台的安装编译工具,可以用简单的语句来描述所有平台的安装(编译过程)。CMake可以说已经成为大部分C++开源项目标配。语法特性介绍基本语法格式:指令(参数1 参数2)参数使用括弧括起参数之间使用空格或分号分开指令是大小写无关的,参数和变量是大小写相关的set(HELLO hello.cpp)add_executable(hello main.cpp...原创 2021-06-29 16:17:03 · 394 阅读 · 0 评论 -
检查、定位内存泄漏
检查、定位内存泄漏检查方法在main函数最后面一行,加上一句_CrtDumpMemoryLeaks()。调试程序,自然关闭程序让其退出,查看输出。输出这样的格式:{453} normal block at 0x02432CA8, 868 bytes long被{}包围的453就是我们需要的内存泄漏定位值,868 bytes long就是说这个地方有868比特内存没有释放。定位代码位置加上头文件#include <crtdbg.h>在main函数第一行加上_CrtSetBreak原创 2021-06-28 21:57:40 · 82 阅读 · 0 评论 -
基于Linux系统的C++开发环境搭建(以Ubuntu系统为例)以及GCC编译器和GDB调试器介绍
基于Linux系统的C++开发环境搭建GCC编译器、GDB调试器的安装启动终端命令行安装sudo apt update# 通过以下命令安装GCC编译器和GDB调试器sudo apt install build-essential gdb安装成功后检查# 以下命令确认每个软件是否安装成功# 如果成功显示版本号gcc --versiong++ --versiongdb --versionCMake安装启动终端命令行安装# 通过以下命令安装CMakesudo apt instal原创 2021-06-28 20:08:57 · 347 阅读 · 0 评论 -
C++从代码到可执行程序经历了什么?
C++从代码到可执行程序的经历1、预编译主要处理源代码文件中的以“#”开头的预编译指令。处理规则见下:删除所有的#define,展开所有的宏定义。处理所有的条件预编译指令,如“#if”、“#endif”、“#ifdef”、“#elif”和“#else”。处理“#include”预编译指令,将文件内容替换到它的位置,这个过程是递归进行的,文件中包含其他文件。删除所有的注释,“//”和“/**/”。保留所有的#pragma 编译器指令,编译器需要用到他们,如:#pragma once 是为了防止原创 2021-06-27 21:25:47 · 615 阅读 · 1 评论 -
const char*、string、char*三者之间的转换
const char*、string、char*三者之间的转换string转const char*string s1 = "abc";const char* cc1 = s1.c_str();const char* 转stringconst char* cc2 = "abc";string s2(cc2);string 转char*string s3 = "abc";char* c1;const int len = s1.length();c1 = new char[len + 1原创 2021-06-25 12:08:11 · 395 阅读 · 0 评论 -
用C++简易设计一个string类
用C++实现string类#include<iostream>#include<cstring>using namespace std;class My_String {public: My_String(const char* str = nullptr);// 默认构造函数 My_String(const My_String& str);// 拷贝构造函数 My_String& operator=(const My_String& str原创 2021-06-09 22:23:14 · 582 阅读 · 0 评论 -
用C++实现字符串循环右移
字符串循环右移n个单位编写一个函数,作用是把一个char组成的字符串循环右移n个单位,比如源字符串是"helloworld",循环右移3个单位后,目标字符串是"rldhellowo"。#include<iostream>using namespace std;#define MAX_LEN 20void loopMove(char* strSrc, int n) { int N = strlen(strSrc) - n; char temp[MAX_LEN]; strcpy(t原创 2021-06-09 10:45:55 · 2348 阅读 · 0 评论 -
用C++实现一个将字符串转换为数字的函数
用C++实现函数atoi()#include<iostream>#include<cmath>using namespace std;int myAtoi(const char* str) { int num = 0;// 保存字符串转换为数字的结果 bool isNegative = 0;// 判断字符串中是否存在正负号 int n = 0; const char* p = str; if (p == nullptr) return -1;// 字符串为空则转为原创 2021-06-08 11:57:17 · 911 阅读 · 0 评论 -
C++四种强制类型转换
C++四种cast转换const_cast用于移除const特性,将const类型转换为非const类型。static_cast用于各种隐式转换,非多态类型的转换,如将非const类型转换为const类型,void*转换为指针,float类型转换为int类型等,能用于多态向上转换安全(子类转化为父类是安全的),向下转换不安全(父类转换为子类是不安全的,因为子类可能有不在父类的字段或方法)。dynamic_cast用于多态类型的转换(包括向上转换和向下转换都是安全的),只适用于指针或引用,对于不明原创 2021-06-08 09:53:20 · 195 阅读 · 0 评论 -
用C++来写一个测试闰年代码
判断闰年的方法年份能被400整除能被4整除但不能被100整除代码实现bool Leap_Yaer(int year){ return ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0));}int main(){ int year; printf("请输出你要判断的年份:\n"); scanf("%d", &year); if (Leap_Yaer(year)) { printf("%原创 2021-06-05 21:11:15 · 1442 阅读 · 0 评论