C++学习笔记
文章平均质量分 62
C++学习笔记
清凉简装
这个作者很懒,什么都没留下…
展开
-
C 断言使用
静态断言 _Static_assertstatic-assert-in-c_Static_assert(sizeof(long)==7, this_should_be_true) build failsas.c:4: error: size of array ‘static_assertion_this_should_be_true’ is negative#define _Static_assert(COND,MSG) typedef char static_assertion_##MS原创 2021-01-21 22:05:07 · 897 阅读 · 1 评论 -
[c语言]c语言中的#和##作用、参数表省略号作用
1. c语言中的#c语言中的# 用于字符串化参数 #123 相当于 “123”#define STR(X) #Xprint(STR(123));// 输出字符串 “123”2. c语言中的##c语言中的## 用于将两个语言符号组合成单个语言符号#define N(x) N##xint N(1) = 1; //N1 = 1int N(2) = 2; //N2 = 23. c...原创 2019-12-30 14:46:54 · 1132 阅读 · 0 评论 -
[技巧]使用int指针访问结构体成员
typedef struct { int a; char b; double c;}STest;int main(){ STest test = { 123, '?', 3.14 }; cout << "a = "<< test.a <<" "<< *((int*)&test)<<endl...原创 2019-09-22 21:44:43 · 739 阅读 · 0 评论 -
STL学习笔记-关联容器
关联容器STL中常用的关联容器有四种:set、map、mutimap、multiset。这四种容器中的元素都是按照键有序排列的,因此关联容器的键值必须是可比较的。如果键值是基本类型可以直接使用,如果键值是自定义类型,需要定义带有比较谓词的构造函数map中保存着一系列的键值对儿,每个键对应一个值,键类似有索引的功能,具有唯一性,值表示该键关联的数据。字典是一个典型的map,每个单词相当于一...原创 2019-09-08 01:06:57 · 174 阅读 · 0 评论 -
STL学习笔记-容器适配器
容器适配器将原容器进行进一步封装,底层基于普通容器,上层对外提供封装后的新接口,满足不同的适用需求。常用的有栈 stack、队列 queue、优先级队列 priority_queue。容器适配器对使用者来说是个黑盒,使用者不需要关注底层实现是什么,只需要了解容器适配器提供的接口。array不能作为容器适配器的底层容器,因为不支持变长的添加元素栈和队列默认适配器是 deque优先队列的默...原创 2019-09-07 18:15:45 · 316 阅读 · 0 评论 -
STL学习笔记-迭代器失效的问题
迭代器失效的问题对容器进行删除操作时,容器中元素的数量发生变化,这种变化可能会导致某些元素的物理地址发生变化,使指向这些元素的迭代器失效,但是并非所有容器的添加删除操作都会导致迭代器失效。vector的删除会导致迭代器失效,特别是end迭代器一定失效。向vector插入操作时,如果原空间已满,会重新申请新空间并将元素拷贝到新空间,所有迭代器都会失效。list、set、map、的操作不会导致...原创 2019-09-07 18:10:09 · 168 阅读 · 0 评论 -
STL学习笔记-函数模板与类模板
函数模板例如编写一个比较大小的函数时,如果参数不确定,则需要编写一组重载函数,以满足不同类型的需求,但是带来的后果是,如果后期需要修改函数逻辑,意味着所有的重载函数都要修改。如果使用函数模板则只需要编写一次即可template <typename T>int compare(const T& a, const T& b){ if(a<b) return -...原创 2019-09-01 16:44:58 · 227 阅读 · 0 评论 -
C++ 11初始化vector方法
// C++11 之前通常采用vector<int> daysInMonth(12); //定义size 为12daysInMonth[0] = 1; daysInMonth[1] = 2; daysInMonth[2] = 3;daysInMonth[3] = 4; daysInMonth[4] = 5; daysInMonth[5] = 6;daysInMonth[6]...原创 2019-05-15 17:40:04 · 6728 阅读 · 0 评论 -
C++通过匿名对象调用成员函数
C++ 通过匿名对象调用成员函数刚开始写第一个 leetcode 程序就看到了之前没见到过的东西。首先,框架定义了一个Solution类,我们把方法写在成员函数twoSum(int,int)内,main()函数直接通过构造一个匿名的对象调用该成员函数。vector<int> ret = Solution().twoSum(nums, target);进一步总结,如果想要调...原创 2019-05-15 17:36:29 · 2911 阅读 · 0 评论 -
函数指针声明、赋值、调用
一、函数指针声明1、返回值类型 ( *指针变量名) ([形参列表]);( *指针变量名) 函数指针声明时括号不能省略,否则改变了运算符的优先级,变成了返回一个指针的函数([形参列表])函数括号中的形参可有可无,视情况而定;二、函数指针赋值以下两种对函数指针的赋值哪个是正确的?int function(int a, int b){ //执行代码}...原创 2019-03-14 10:58:18 · 11994 阅读 · 3 评论 -
如何查看cpp文件的编码方式 (UTF-8还是MBCS?)
1、如何查看源代码编码方式,如何查看cpp文件的编码方式,是UTF8还是MBCS(多字节编码)?如果编程中出现中文乱码的情况,大多是因为编码方式的问题(cpp文件的编码方式与编译器设置的编码方式不一致导致)我们可以安装Notepad++查看,如果显示ANSI编码,那就是多字节编码,也就是GBK编码(中文版Windows默认)。如果想修改,可以直接在Notepad++进行转换。2、U...原创 2019-03-05 14:15:13 · 6911 阅读 · 0 评论 -
动态链接库函数调用约定
一、函数调用约定当参数个数多于一个时,按照什么顺序把参数压入堆栈函数调用后,由谁来把堆栈恢复原装。在高级语言中,通过函数调用约定来说明这两个问题。常见的调用约定有: stdcall,cdecl,fastcall,thiscall,naked call__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译...原创 2018-11-26 13:14:50 · 442 阅读 · 1 评论 -
[填坑]VS环境下C语言与C++混合编译
1、若在cpp文件中引用c语言代码,需要添加extern "C" 原因参考:C和C++混合编程(__cplusplus 与 external "c" 的使用) 2、若C语言部分独立为一个.c文件(工程中既有cpp文件又有c文件)1、取消.c文件的预编译头2、.c文件中不可添加 #include "stdafx.h"3、.c文件中不可出现extern "c" ...原创 2018-05-07 23:57:22 · 6932 阅读 · 0 评论