C++
小猪快点跑
这个作者很懒,什么都没留下…
展开
-
C/C++ :extern "C"
目录一、extern "C" 的作用二、测试程序一、extern "C" 的作用extern "C" { int foo(int x, int y); } C 函数按 C 风格编译时,函数 foo 在编译后的符号库中的符号大概是 _foo,只包括函数名。 C++ 直接包含C 的头文件编译,是 C++ 风格编译,foo 在编译时的符号库...原创 2019-10-24 17:49:52 · 166 阅读 · 0 评论 -
C/C++:VS2017 查看类的布局
1、查看:类的内存布局(1)在桌面(\Users\[user]\Desktop)创建项目mlayout/* mlayout.cpp */#include "pch.h"#include <iostream>using namespace std;class Aclass {public: int a;};int main() { return 0;...原创 2019-10-13 10:35:29 · 945 阅读 · 0 评论 -
C/C++:STL 线程库
1、创建多线程#include <iostream>#include <thread>using namespace std;void printx(int x){ cout << "thread_id = " << this_thread::get_id() << " x = " << x <<...原创 2019-09-21 17:23:19 · 389 阅读 · 0 评论 -
C/C++:通过指针访问数据成员
1、通过指针访问数据成员// 该类只有 私有数据成员class Stu {private: int a; char c;public: Stu(int a, char c) : a(a), c(c) { //this->a = a; //this->c = c; }};// 通过指针 访问 私有数据成员int main() { ...原创 2019-08-30 12:24:59 · 1715 阅读 · 0 评论 -
C/C :面向对象的三大特性 —— 封装、继承、多态
一、面向对象的三大特性1、封装 通过封装将一部分成员隐藏起来,另一部分成员作为类或对象与外部的接口。从而控制数据的访问权限,并且能够减少程序中不同部分之间的相互影响。隐藏对象的属性和接口实现细节,仅仅对外提供接口和方法。 优点:提高安全性,隔离影响。2、继承 在父类基础上创建派生类,可以通过增加、修改、替换父类成员产生派生类,对父类进行...原创 2019-05-02 15:05:58 · 1349 阅读 · 0 评论 -
C/C++:具有全局特性的特殊类型
1、enum 枚举类型enum string { x1, //0 //全局宏常量 x2, //1 x3 = 10, //10 x4, //11 x5, //12} x; //0 //全局变量int main(){ cout << ...原创 2019-12-04 10:19:15 · 158 阅读 · 0 评论 -
C/C++:static 关键字
static 关键字目录一、static 数据成员、static 成员函数static 数据成员static 成员函数公有静态成员、私有静态成员三、static 内部函数、extern 外部函数参考链接:目录一、static 数据成员、static 成员函数二、static 全局变量、static 局部变量三、static 内部函数、extern 外部函数一、static 数据成员、st...原创 2019-10-25 17:51:46 · 175 阅读 · 0 评论 -
C/C++格式输出:向上取整、向下取整、四舍五入、保留6位小数、截断6位小数
C/C++格式输出:向上取整、向下取整、四舍五入、保留6位小数、截断6位小数#include <bits/stdc++.h> //万能头文件1、向上取整,#include<cmath> float a1 = 10.1; cout << ceil(a1) << endl;2、向下取整 float a2 = 10.1;...原创 2019-08-06 14:10:27 · 12015 阅读 · 1 评论 -
C/C++:各类型的最大值、最小值宏
#include <climits> 中各类型的最大值、最小值CHAR_MIN char的最小值SCHAR_MAX signed char 最大值SCHAR_MIN signed char 最小值UCHAR_MAX unsigned char 最大值SHRT_MAX short 最大值SHRT_MI...原创 2019-08-11 14:01:47 · 3900 阅读 · 0 评论 -
inline:内联函数
一、内联函数 将函数定义为内联函数,就是将它在编译时,在调用点 “内联地” 展开。 内联函数可以避免函数调用的开销,是以空间换时间。 inline关键字必须和函数定义放在一起才可以实现内联,仅仅将inline放在函数声明之前不起任何作用。inline是一个用于实现的关键字而不是一个用于声明的关键字。对于类方法,定义在类体内部的方法自动成为内联方...原创 2019-08-24 21:55:53 · 256 阅读 · 0 评论 -
类初始化、构造函数、拷贝构造、列表初始化、对象数组
1、构造函数、拷贝构造函数 如果不写任何构造函数,编译器会自动添加:默认的构造函数、默认的拷贝构造函数。 如果自定义了一个构造函数,而没有自定义拷贝构造函数,编译器会自动添加:默认拷贝构造函数。 如果自定义了一个拷贝构造函数,而没有自定义构造函数,编译器不会添加默认的构造函数。此时因为没有任何普通构造函数,无法定义一个实列对象。因此只定义一个拷贝构造...原创 2019-08-26 18:26:16 · 418 阅读 · 0 评论 -
C/C++:int、bool、float、ptr 与 0 的比较
1. int 与 0 比较if(x == 0) 推荐写法,暗示x为整形数值,整形数值比较if(!x)2. bool 与 0 比较:if(x == 0)if(x == false)if(!x) 推荐写法,暗示x为bool类型,真假判断在逻辑上,上面三个都是正确的,而且都可以编译通过。但是,(1)第一...原创 2019-08-27 15:24:08 · 888 阅读 · 0 评论 -
C/C++:预编译、编译、汇编、链接
一、编译预处理(处理#,.C/C++ ---> .i) 1、进行代码文本的替换和拷贝工作,处理#开头的指令,生成预编译文件(.i文件): (1)展开宏(#define);(2)处理条件编译(#ifdef);(3)插入头文件(#include)。2、其他操作: (1)删除注释; (2)添加行号和文件标识。比如:#2"hello.c...原创 2019-08-27 15:55:10 · 195 阅读 · 0 评论 -
C/C++:子串判断
一、子串判断题目描述我们定义字符串包含关系:字符串A=abc,字符串B=ab,字符串C=ac,则说A包含B,A和C没有包含关系。输入描述:两个字符串,判断这个两个字符串是否具有包含关系,测试数据有多组,请用循环读入。输出描述:如果包含输出1,否则输出0.输入abc ab输出11、C风格,strstr()char *strstr(const...原创 2019-09-01 12:42:23 · 7854 阅读 · 0 评论 -
C/C++:字符串分割、版本比较
一、getline()1、从屏幕读入,切分,不会跳出while。会一直等待输入,换行无效string s;while(getline(cin, s)) { // 默认按空格切分 cout << s << endl;}string s;while(getline(cin, s, '.')) { // 按'...原创 2019-09-01 13:13:57 · 347 阅读 · 0 评论 -
C/C++:类型别名(typedef、using)、类型说明符(auto、decltype)
一、类型别名1、typedef(1)定义普通类型#include <iostream>using namespace std;typedef unsigned char u8, *u8p;int main(){ u8 c = 'c'; // unsigned char u8p pc = &c; // unsigne...原创 2019-09-15 16:20:47 · 914 阅读 · 0 评论 -
C/C++:智能指针(shared_ptr、unique_ptr、weak_ptr)
一、unique_ptr unique_ptr 是从 C++ 11 开始,定义在 <memory> 中的智能指针(smart pointer)。它持有对对象的独有权,即两个 unique_ptr 不能指向一个对象,不能进行复制操作只能进行移动操作。 释放 nullptr 不犯法!1、unique_ptr初始化//c11unique_ptr&l...原创 2019-09-15 22:17:17 · 150 阅读 · 0 评论 -
C/C++:右值引用、移动语义
一、右值引用 本身是左值,可以引用右值,接管临时对象的资源。 左值引用不能引用右值,右值引用不能引用左值。// 左值引用int a = 10;int &b = a; // 引用的是一个左值// 右值引用int a = 10;int &&b = a + 1; // 引用 ...原创 2019-09-18 12:12:49 · 309 阅读 · 0 评论 -
C/C++:(1)vector、list 插入性能比较、(2)vector 扩容
一、vector、list 插入性能比较1、linux 下比较(1)vector#include <iostream>#include <vector>using namespace std;int main(){ vector<int> nums; int n = 10000000; clock_t t1 = clock();...原创 2019-09-22 23:30:17 · 1702 阅读 · 0 评论 -
C/C++:strcpy、strlcpy、strncpy、strcpy_s、memcpy
一、C语言中的空字符串、空指针 str族函数必须保证传入的字符串以 '\0' 结尾,不能是空指针,否则会报错。1、空指针char *str1 = nullptr; // 空指针printf("%d\n", strlen(str1)); // 报错,strlen(nullptr)2、空字符串//char...原创 2019-10-09 18:29:44 · 1489 阅读 · 0 评论 -
C++ 适配器 —— deque 双向队列
1、功能 deque支持高效 随机访问,两端插入和删除操作。与vector的用法很相似。2、操作--------------------------------------------------------------------------------------1、头尾 增加、删除dq.push_front(x); // 头部增加一个元素Xdq....转载 2019-04-17 22:47:39 · 141 阅读 · 0 评论 -
C/C++ 基础运算
1、sizeof、strlenchar str = "\r\v\\\082will\n";cout << strlen(a) << endl; // 3cout << sizeof(a) << endl; // 12\r,\v,\\,\0,8,2,w,i,l,l,\n2、\ddd、\x...原创 2019-08-01 18:37:39 · 364 阅读 · 0 评论 -
C++:sizeof() —— 变量、指针、数组、类、结构体、联合体(共用体)、枚举类型
一、基本计算1、变量大小(64位机)sizeof(bool) = 1sizeof(char) = 1sizeof(short) = 2sizeof(int) = 4sizeof(long) = 4sizeof(long long) = 8sizeof(float) = 4sizeof(double) = 82、数组、指针大小char arr[10];...原创 2019-07-23 11:27:40 · 1601 阅读 · 0 评论 -
重载、重定义(隐藏)、重写(覆盖)
1、重载 同一个类中的同名函数会重载; 重载函数的函数名相同,参数不同,不能用返回值判断是否是函数重载; 在不同类中的同名函数不是重载。2、重定义(隐藏) 重定义发生在派生类和基类之间; 若派生类和基类有函数名相同的成员函数,但基类中没有用virtual关键字声明,则派生类成员函数为重定义; 若...原创 2019-07-31 13:10:26 · 320 阅读 · 0 评论 -
C/C++:强制类型转换 —— const_cast、static_cast、reinterpret_cast、dynamic_cast
一、强制类型转换1、const_cast 用于去掉底层const,将实参(常引用 / 指向常量的指针)转换为 普通引用和普通指针。反之是隐式转换。const char *p;char *ps = const_cast<char*>(p);2、static_cast 任何具有明确定义的类型转换,只要不包含底层const,都可以使用st...原创 2019-05-07 20:02:54 · 900 阅读 · 0 评论 -
C++ 适配器 —— queue 单向队列
1、queuequeue<int> q;//查询元素int a = q.front();int b = q.back();//增删元素q.push(val);q.pop();//大小判断q.empty();q.size();2、访问与查找中间元素 只能访问首尾元素(访问方式看接口),中间元素无法访问、查找。 需要访问...原创 2019-05-04 15:39:38 · 438 阅读 · 0 评论 -
const 数据成员 —— const 成员函数 —— const 类对象
1、const 数据成员 在数据成员之前加const修饰符。 const修饰变量一般有两种方式:const T *a,或者 T const *a,这两者都是一样的,主要看const位于*的左边还是右边,位于*左边是底层const,位于*右边是顶层const。2、const 成员函数 类的成员函数后面加 const。void fun() co...转载 2019-05-02 17:53:06 · 1950 阅读 · 0 评论 -
C++数字转字符串-字符串转数字
stringstream类,头文件<sstream>1. 字符串到整数 stringstream sstr(str); int x; sstr >> x;(即从sstr中提取数据)2. 整数到字符串 stringstream sstr; int x; sstr << x; string s...转载 2019-04-26 21:50:22 · 1424 阅读 · 1 评论 -
排序容器——set、multiset、map、multimap
1、特点 顺序容器支持随机访问,排序容器不支持随机访问。BST结构:查找、插入、删除。复杂度:log(n)。2、时间复杂度 STL中 set、multiset、map、multimap 使用 “平衡二叉树” 存放数据,是四种 “排序容器”。 查找、插入、删除等操作可以在 log(n) 时间复杂度完成。 multise...原创 2019-04-17 21:52:18 · 335 阅读 · 0 评论 -
vector<int> 排序-求极值-求和-查找
vector<int> data = { 1, 3, 2, 4 };1、升序、降序sort(data.begin(), data.end()); //升sort(v.begin(), v.end(), less<int>()); //升sort(v.begin(), v.end(), greater<int>()); //降bool ...原创 2019-04-16 19:58:10 · 715 阅读 · 0 评论 -
string s.substr()的用法
如果string s="0123456789";string sub1=s.substr(5);表示从下标5开始一直到字符串结束sub1="56789";string sub2=s.substr(3,5);表示从下标3开始一直到后面5位数结束sub2="34567";原文:https://blog.csdn.net/cheung99857/article/details/...转载 2019-04-03 10:54:33 · 13535 阅读 · 0 评论 -
关联容器map与set——count与find
set<int> myset = { 0, 1, 2, 3, 4, 5};auto iter= myset.find(1);返回的是迭代器,指向key=1的元素,或者是myset.end(),表示未找到。int num= myset.count(1);返回的是元素的数量。...原创 2019-04-03 10:28:53 · 2571 阅读 · 0 评论 -
C++ 智能指针 —— shared_ptr、unique_ptr、weak_ptr
一、为什么要使用智能指针 普通指针申请的内存空间,如果没有在函数结束时及时回收内存,会造成内存泄漏。 智能指针是一个类的对象,在超出其作用域时,会自动调用析构函数,释放内存空间,避免内存泄漏。1、unique_ptr(独占指针) 保证同一时间只有一个智能指针指向某对象。unique_ptr<int> p1 = int(2)...原创 2019-05-07 21:13:21 · 89 阅读 · 0 评论 -
C++ 空悬指针、野指针
一、空悬指针 指向已经被释放的内存 或者 指向已经被销毁的对象。情况一:{ char *dp = NULL; { char c; dp = &c; } //变量c释放,dp变成空悬指针}情况二:void func(){ char *dp = (char *)malloc(A_CONST); ...转载 2019-05-07 22:09:04 · 763 阅读 · 0 评论 -
C++ 浅拷贝、深拷贝、默认拷贝构造函数、自定义拷贝构造函数
一、默认拷贝构造函数、浅拷贝 当对一个已知对象进行拷贝时,编译系统会自动调用一种构造函数 —— 拷贝构造函数,如果用户未定义拷贝构造函数,则会调用默认拷贝构造函数。#include <iostream> using namespace std;class Student{private: int num; char *name; ...原创 2019-07-17 20:31:59 · 1241 阅读 · 0 评论 -
C++:list 删除、set 删除
1、问题描述 有一种场景是我们需要不断在序列里找到元素并将其删除,并且还需要使用被删除元素之前或之后的迭代器,那么如何选择容器呢?2、容器选择1、顺序容器 list.erase() 适合通过不断移动迭代器找到对应元素,记录之前或之后的迭代器,再将元素删除。2、关联容器 set.earse() 适合通过 find() 查找到元素对应迭...原创 2019-07-19 21:25:57 · 2438 阅读 · 1 评论 -
C++:顺序容器查找、关联容器查找
1、顺序容器 vectorvector<int> vt;//---------- 查找 ----------find(vt.begin(), vt.end(), value); //返回迭代器count(vt.begin(), vt.end(), value); //返回计数值2、关联容器 mapmap&l...原创 2019-07-19 20:28:40 · 575 阅读 · 0 评论 -
VS2017 动态链接库.dll、静态链接库.lib
一、创建静态/动态链接库1、打开VS2017,新建动态链接库(DLL),命名为 Dll1,即生成 Dll1.cpp。然后添加头文件命名为 Dll1.h。2、在 Dll1.cpp 中编写简单函数如下// Dll1.cpp : 定义 DLL 应用程序的导出函数。//#include "stdafx.h"#include "Dll1.h"int funAdd(int a,...原创 2019-07-19 16:35:39 · 2488 阅读 · 0 评论 -
有序集合与无序集合
1、有序集合与无序结合的数据结构multiset —— 有序集合,底层数据结构为红黑树 rb-tree,查找效率为 对数复杂度。unordered_multiset —— 无序集合,底层数据结构为 hash-table,映射,查找效率为很高,但是存在冲突,主要看冲突是否严重。2、...原创 2019-07-02 19:35:32 · 775 阅读 · 0 评论 -
deque与vector的主要区别
一、数据结构deque与vector非常相似。它也采用动态数组管理元素,提供随机存取,有着和vector几乎一样的接口。不同的是deque的动态数组头尾都开放,因此能在头尾两端进行快速安插和删除。(动态数组,可变长度,随机访问)deque通常实作为一组独立区块,第一区块朝某方向扩展,最后一个区块朝另一个方向扩展。二、deque与vector的主要不同之处在于:1. 两端都能快速...转载 2019-07-02 21:54:01 · 2569 阅读 · 0 评论