
C++学习
zhuikefeng
人工智能爱好者
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《Effective STL》条款解读
条款01:慎重选择容器类型vector、list和deque有着不同的复杂度,vector是默认使用的序列类型。当需要频繁在序列中间做插入和删除操作时,应使用list。当大多数插入和删除操作发生在序列的头部和尾部时,应使用deque。 可以将容器分为连续内存容器和基于节点的容器两类。连续内存容器把元素存放在一块或多块(动态分配的)内存中,当有新元素插入或已有的元素被删除时,同一块内存中的其他元素要向前或向后移动,以便为新元素让出空间,或者是填充被删除元素所留下的空隙。这种移动会影响到效率和异常安全性。原创 2020-08-22 10:49:34 · 1016 阅读 · 0 评论 -
程序的编译与链接
一、编译链接的步骤1.1预处理命令:gcc -E hello.c -o hello.i预编译主要处理源文件中以#开始的预编译指令将#define删除,并展开所有的宏定义 处理条件预编译指令,如#if,#ifdef,#ifndef,#elif,#else,#endif 处理#include预编译指令,将被包含的文件插入到该预编译指令的位置。这个过程是递归的,即被包含的文件还可能包含其他文件。 删除所有的注释 添加行号和文件名标识,便于编译时编译器产生调试用的行号或编译错误警告时的行号原创 2020-08-16 21:40:55 · 381 阅读 · 0 评论 -
C++11多线程编程
1.初识多线程#include<thread>using namespace std;int main(){ thread t(fun); //t.detach; 子线程由C++运行时库接管,主线程和进程可能先于次线程先退出,导致次线程结果打印不到屏幕 if(t.joinable){ t.join;//主线程等待该子线程运行结束 } return 0;}2.线程接受函数对象#include<thread&g原创 2020-08-12 21:31:51 · 199 阅读 · 0 评论 -
Makefile的相关用法
#MakefileCXXFLAGS := -O3 -g -Wall -shared std=c++11 -pthread -fPICCPPCOMP := g++CCOMP := gccLINK_RPATH := ......#动态库.so的路径用-L指定,库的名称用-l指定,之间可以没有空格LINKFLAGS := -Wl,rpath=$(LINK_RPATH)/bin -L./bin -lstaticfb -lraw_fea -lconv_addnoise -.原创 2020-07-17 11:27:09 · 706 阅读 · 0 评论 -
pybind11使用指南
官方文档:pybind11文档官方pdf:pybind11文档pdf原创 2020-07-09 11:57:16 · 30617 阅读 · 9 评论 -
《Effective C++》条款解读
条款26:尽可能延后变量定义式的出现时间一个变量被提前定义出来之后,后续可能因为某些原因没有被使用过,但是你仍得付出变量的构造成本和析构成本 延迟变量定义到非给他赋初值时,因为构造之后再赋值的成本比初始化的成本高 如果变量在for循环中被使用,变量在循环外定义,在循环内赋值,调用1次构造函数和析构函数,n次赋值。变量在循环内初始化会调用n次构造函数和n次析构函数。除非赋值成本比构造+析构成本低,或者后续还需要用到这个变量,否则应该选择第二种方案。条款27:尽量少做转型动作转型并非只是告诉编译器原创 2020-07-05 21:13:33 · 744 阅读 · 0 评论 -
std::enable_if的用法
一.测试代码1首先gt_zero是一个模板函数,typename std::enable_if<std::is_integral<T>::value,bool>::type是函数的返回值类型,std::enable_if<>一般是由两部分组成,第一个参数是一个判定式,当判定式为真时,std::enable_if<std::is_integral<T>::value,bool>::type的这个type数据成员存在,且值为bool,如果没有第二个原创 2020-06-30 17:33:12 · 4707 阅读 · 1 评论 -
myTinySTL源码解析:vector
一、测试程序#ifndef MYTINYSTL_VECTOR_TEST_H_#define MYTINYSTL_VECTOR_TEST_H_// vector test : 测试 vector 的接口与 push_back 的性能#include <vector>#include "../MyTinySTL/vector.h"#include "test.h"namespace mystl{namespace test{namespace vector_test原创 2020-06-28 19:37:58 · 1947 阅读 · 2 评论 -
cJSON源码解析(超级详细!!!)
1.cJSON结构体定义typedef struct cJSON { struct cJSON *next,*prev; /* next/prev allow you to walk array/object chains. Alternatively, use GetArraySize/GetArrayItem/GetObjectItem */ struct cJSON *child; /* An array or object item will have a child pointer p原创 2020-06-26 21:35:06 · 4930 阅读 · 1 评论 -
标准库头文件:atomic
1.常用变量atomic //原子类模板及其布尔型,整型和指针类型的特化atomic_ref //提供对非原子对象的原子操作atomic_flag //锁的布尔原子类型std::atomic_bool //std::atomic<bool>std::atomic_char //std::atomic<char>std::atomic_sch......原创 2020-03-11 19:34:14 · 4083 阅读 · 0 评论 -
标准库头文件:cstdio
1.常用变量FILE //类型,保存控制C I/O流所需的全部信息 fpos_t //类型,指定文件中的位置 size_t //sizeof 运算符返回的无符号整数类型 NULL //空指针常量BUFSIZ //std::setbuf 所用的缓冲区大小 stdin //与输入流关联到 FILE* 类型表达式stdout //与输出流关联的...原创 2020-03-11 18:30:09 · 1818 阅读 · 0 评论 -
标准库头文件:cmath
1.常用变量INFINITY //正无穷大或保证上溢float的值 HUGE_VALF //float的上溢值HUGE_VAL //double的上溢值HUGE_VALL //long double的上溢值NAN //Not A Number非数字float_t //至少和float一样宽的最高效浮点类型double_t //至少和double一样宽的最高...原创 2020-03-11 14:20:03 · 1196 阅读 · 0 评论 -
标准库头文件:numeric
1.常用操作iota(vec.begin(), vec.end(), 2);//将vec填充成2开始的递增序列accumulate(vec1.begin(), vec1.end(), 0);//累加区间内的和,初值是0reduce(vec1.begin(), vec1.end(), 0);//累加区间内的和,初值是0,和accumulate相似,但是执行速度更快,C++17支持inne...原创 2020-03-11 13:40:10 · 438 阅读 · 0 评论 -
标准库头文件:algorithm
1.常用操作for_each(vec.begin(), vec.end(), [](int &n){ n++; });//将vector中的所有元素加一for_each(vec.begin(), vec.end(), Sum());//Sum是重载operator()的类for_each_n(vec.begin(), 3, [](auto& n){ n++; });//将...原创 2020-03-10 11:59:10 · 319 阅读 · 0 评论 -
标准库头文件:cctype
1.常用操作int isalnum( int ch );检查字符是否为字母或数字int isalpha( int ch );检查字符是否为字母int islower( int ch );检查字符是否为小写int isupper( int ch );检查字符是否为大写字符int isdigit( int ch );检查字符是否为数字int isxdigit( int ch );检查字...原创 2020-03-10 10:21:39 · 190 阅读 · 0 评论 -
标准库头文件:cstdint
1.常用操作2.常用变量int8_t //宽度恰为8位的有符号整数类型,无填充位并对负值使用补码int16_t //宽度恰为16位的有符号整数类型,无填充位并对负值使用补码int32_t //宽度恰为32位的有符号整数类型,无填充位并对负值使用补码int64_t //宽度恰为64位的有符号整数类型,无填充位并对负值使用补码uint8_t //宽度恰为...原创 2020-03-10 10:20:26 · 4388 阅读 · 0 评论 -
标准库头文件:memory
1.常用操作std::make_unique<int>(5);//将5变成独有对象unique_ptr::get();//返回指向被管理对象的指针,如果无被管理对象,则为nullptrunique_ptr::release();//释放被管理对象的所有权unique_ptr::swap(unique_ptr& other);//交换两个被管理对象std::make...原创 2020-03-09 20:07:55 · 4383 阅读 · 1 评论 -
标准库头文件:chrono
1.常用操作2.常用变量chrono::nanoseconds //纳秒chrono::microseconds //微秒chrono::milliseconds //毫秒chrono::seconds //秒chrono::minutes //分chrono::hours //小时chrono::days //天chrono::w...原创 2020-03-09 19:27:08 · 1251 阅读 · 0 评论 -
标准库头文件:ctime
1.常用操作clock_t clock(); //返回自程序启动时处理器时钟时间,1000.0 * (end-start) / CLOCKS_PER_SEC得到ms数time_t time( time_t* arg ); //返回系统当前时间和系统规定的起始时间作差,arg一般是nullptrdouble difftime( time_t time_end, time_beg...原创 2020-03-09 19:14:12 · 1464 阅读 · 0 评论 -
标准库头文件:cstdlib
1.常用操作void* malloc( size_t size );//分配size大小的内存,单位是B,结果需要进行强制类型转换void* calloc( std::size_t num, std::size_t size );//分配num * size大小的内存,并将每个bit初始化为0void* realloc( void* ptr, size_t new_size );//在p...原创 2020-03-09 17:58:27 · 1992 阅读 · 0 评论 -
标准库头文件:string
1.常用操作getline(cin, str);//将输入写入到str中int stoi( const string& str );//将str转换成整数,要求首字符必须是数字long stol( const string& str );//将str转换成long型,要求首字符必须是数字long long stoll( const string& str );/...原创 2020-03-09 16:59:40 · 2753 阅读 · 0 评论 -
标准库头文件:cstring
1.常用操作char* strcpy( char* dest, const char* src );//将src复制到destchar* strcat( char* dest, const char* src );//将src接到dest的后面,dest要有足够空间,char dest[20];int strcmp( const char *lhs, const char *rhs );...原创 2020-03-09 16:27:54 · 586 阅读 · 0 评论 -
【CPP】模板偏特化
注意事项:1.首先要定义通用模板类,再定义特化的模板类2.特化的模板类是处理复杂数据类型的,如vector,list,set,unordered_set,map,unordered_map。如果处理的还是简单类型数据,就会引起对自己的循环调用。#include <iostream>#include <yaml-cpp/yaml.h>#include <...原创 2020-02-26 11:38:30 · 466 阅读 · 0 评论 -
C++经典案例:给定出栈序列判定是否合法
问题描述: 对于给定入栈序列,不同的入栈出栈操作顺序,会产生不同的出栈序列,现给定出栈序列,判定其是否合法。输入范例:5 12345 54312,第一个数表示序列总数,第二个第三个分别表示入栈和出栈序列期望输出:判断出栈序列是否合法,输出合法,或者不合法。示例代码:#include <iostream>#include <fstrea...原创 2018-11-27 16:24:09 · 2332 阅读 · 0 评论 -
【CPP】:模板类与友元函数实现链表
hello.h#include<iostream>using namespace std;template <typename Dtype>class Node{ private: template <typename DataType> friend void show(Node<DataType&...原创 2018-10-29 19:48:05 · 416 阅读 · 0 评论 -
C++经典案例:处理重复快递数据
问题描述: 在快递数据中,快递会在不同的时间会刷新,这样对同一个快递编号会有多个时间信息与之对应,现在只要保留最近一次的时间信息。输入范例:2018/02/14-12:30|nike2018/10/14-12:30|nike2018/12/14-12:30|nike2018/04/14-12:30|nike2018/03/14-12:30|nike2018/09...原创 2018-11-26 20:43:57 · 844 阅读 · 0 评论