C++
文章平均质量分 86
Adenialzz
Keep Learning.
展开
-
AI移动端优化之Im2Col+Pack+Sgemm
这篇文章是基于NCNN的Sgemm卷积为大家介绍Im2Col+Pack+Sgemm的原理以及算法实现,希望对算法优化感兴趣或者做深度学习模型部署的读者带来帮助。转载 2022-07-12 22:41:31 · 876 阅读 · 0 评论 -
Pytorch自定义C++/CUDA扩展
Pytorch自定义C++/CUDA扩展翻译 2022-07-04 21:35:33 · 2655 阅读 · 2 评论 -
给 Python 算法插上性能的翅膀——pybind11 落地实践
给 Python 算法插上性能的翅膀——pybind11 落地实践转载 2022-07-03 19:04:52 · 1909 阅读 · 0 评论 -
从零Makefile落地算法大项目,完整案例教程
从零Makefile落地算法大项目,完整案例教程转载 2022-07-01 22:30:39 · 1109 阅读 · 0 评论 -
在Python中调用C/C++:cython及pybind11
在Python中调用C/C++:cython及pybind11转载 2022-06-20 17:27:46 · 2077 阅读 · 3 评论 -
memcpy和memmove的区别以及内存重叠问题
memcpy和memmove的区别以及内存重叠问题转自:https://www.codecomeon.com/posts/89/区别memcpy() 和 memmove() 都是C语言中的库函数,在头文件 string.h 中,作用是拷贝一定长度的内存的内容,原型分别如下:void *memcpy(void *dst, const void *src, size_t count);void *memmove(void *dst, const void *src, size_t count);他转载 2022-04-10 12:41:14 · 131 阅读 · 0 评论 -
关键字库函数
关键字库函数转自:https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/ej3mx1/sizeof和strlen的区别strlen 是头文件<cstring> 中的函数,sizeof 是 C++ 中的运算符。strlen 测量的是字符串的实际长度(其源代码如下),以 \0 结束。而 sizeof 测量的是字符数组的分配大小。strlen 源代码size_t strlen(const char *str)转载 2022-04-09 21:56:21 · 241 阅读 · 0 评论 -
C++遍历删除元素
C++遍历删除元素转自:http://zencoder.info/2019/10/11/erase-element-from-container/今天看到一个patch fix从std::map中遍历删除元素导致crash问题,突然意识到自己对如何正确地从map等C++容器中删除元素也没有很牢固清醒的认知。重新梳理了下这块的正确做法,记录在此,以备后忘。基础知识C++的容器按存储方式分为两类:以数组形式存储的顺序容器,如:vector,deque以不连续节点形式存储的容易,如:list, se转载 2022-04-09 17:35:17 · 3927 阅读 · 1 评论 -
C++面试常考题——编译内存相关
C++面试常考题——编译内存相关转自:https://leetcode-cn.com/leetbook/read/cpp-interview-highlights/e4ns5g/C++程序编译过程编译过程分为四个过程:编译(编译预处理、编译、优化),汇编,链接。编译预处理:处理以 # 开头的指令;编译、优化:将源码 .cpp 文件翻译成 .s 汇编代码;汇编:将汇编代码 .s 翻译成机器指令 .o 文件;链接:汇编程序生成的目标文件,即 .o 文件,并不会立即执行,因为可能会出现:.cpp转载 2022-04-08 22:32:21 · 292 阅读 · 0 评论 -
C++编译时多态和运行时多态
C++编译时多态和运行时多态作者:melonstreet出处:https://www.cnblogs.com/QG-whz/p/5132745.html本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。前言今日的C++不再是个单纯的“带类的C”语言,它已经发展成为一个多种次语言所组成的语言集合,其中泛型编程与基于它的STL是C++发展中最为出彩的那部分。在面向对象C++编程中,多态是OO三大特性之一,这种多态称为转载 2022-01-19 13:29:50 · 572 阅读 · 0 评论 -
C++面试常见问题一
C++面试常见问题一转自:https://oldpan.me/archives/c-interview-answer-1原作者:[oldpan][https://oldpan.me/]前言这里收集市面上所有的关于算法和开发岗最容易遇到的关于C++方面的问题,问题信息来自互联网以及牛客网的C++面试题目汇总。答题总结的顺序大体是按照问题出现的频率进行排序的,也有自己被面试问到的问题,越在前面的问题再面试中越容易被问到,作为笔记。当然,这些C++概念适合所有人,并非是准备面试或者正在面试的童鞋,如果转载 2022-01-19 10:38:57 · 420 阅读 · 0 评论 -
C++11新特性选讲 语言部分 侯捷
C++11新特性选讲 语言部分 侯捷本课程分为两个部分:语言的部分和标准库的部分。只谈新特性,并且是选讲。本文为语言部分笔记。语言Variadic Templatesmove semanticsautoRange-based for loopInitializer listLambdas…标准库type_traitsunodered containersforward_listarraytupleconcurrencyRegEx…关于头文件C++11原创 2022-01-15 10:06:32 · 531 阅读 · 0 评论 -
C++11 std::function, std::bind, std::ref, std::cref
C++11 std::function, std::bind, std::ref, std::cref转自:http://www.jellythink.com/std::function看看这段代码先来看看下面这两行代码:std::function<void(EventKeyboard::KeyCode, Event*)> onKeyPressed;std::function<void(EventKeyboard::KeyCode, Event*)> onKeyRelea转载 2022-01-10 20:15:14 · 456 阅读 · 0 评论 -
C++11 右值引用、移动语义、完美转发、万能引用
C++11 右值引用、移动语义、完美转发、引用折叠、万能引用转自:http://c.biancheng.net/C++中的左值和右值右值引用可以从字面意思上理解,指的是以引用传递(而非值传递)的方式使用 C++ 右值。关于 C++ 引用,已经在《C++引用》专题给大家做了详细的讲解,这里不再重复赘述。接下来重点给大家介绍什么是 C++ 右值。在 C++ 或者 C 语言中,一个表达式(可以是字面量、变量、对象、函数的返回值等)根据其使用场景不同,分为左值表达式和右值表达式。确切的说 C++ 中左值和右转载 2022-01-08 15:30:49 · 437 阅读 · 0 评论 -
CMake指令入门 ——以构建OpenCV项目为例
CMake指令入门转自:https://blog.csdn.net/sandalphon4869/article/details/100589747一、安装sudo apt-get install cmake安装好后,输入cmake -version如果出现了cmake的版本显示,那么说明安装成功二、cmake编译cmake的作用就是将在IDE编译器中的编译功能拿出来,可以在终端上完成。类似于vim和文本编辑器。cmake的编译方式:内部构建(in-source-build)转载 2022-01-05 22:27:28 · 1936 阅读 · 2 评论 -
C++ ACM模式输入输出
C++ ACM模式输入输出以下我们都以求和作为题目要求,来看一下各种输入输出应该怎么写。1 只有一个或几个输入输入样例:3 5 7输入输出模板:int main() { int a, b, c; // 接收有限个输入 cin >> a >> b >> c; // 输出结果 cout << a+b+c << endl;}2 先给行数T,再给出T行输入样例:33 5 76 8 912原创 2021-12-30 23:29:06 · 11753 阅读 · 0 评论 -
C++中类的拷贝控制
C++中类的拷贝控制转自:https://www.cnblogs.com/ronny/p/3734110.html1,什么是类的拷贝控制当我们定义一个类的时候,为了让我们定义的类类型像内置类型(char,int,double等)一样好用,我们通常需要考下面几件事:Q1:用这个类的对象去初始化另一个同类型的对象。Q2:将这个类的对象赋值给另一个同类型的对象。Q3:让这个类的对象有生命周期,比如局部对象在代码部结束的时候,需要销毁这个对象。因此C++就定义了5种拷贝控制操作,其中2个移动操作是C+转载 2021-12-29 17:44:06 · 1104 阅读 · 0 评论 -
深拷贝与浅拷贝、值语义与引用语义对象语义 ——以C++和Python为例
深拷贝与浅拷贝、值语义与引用语义/对象语义 ——以C++和Python为例值语义与引用语义(对象语义)本小节参考自:https://www.cnblogs.com/Solstice/archive/2011/08/16/2141515.html概念在任何编程语言中,区分深浅拷贝的关键都是要区分值语义和引用语义(对象语义)。值语义(value sematics)指的是对象的拷贝与原对象是独立的、无关的,就像拷贝 int 一样。C++ 的内置类型(bool/int/double/char)都是值语义,原创 2021-12-29 17:38:31 · 1227 阅读 · 0 评论 -
C++中智能指针的原理、使用、实现
C++中智能指针的原理、使用、实现转自:https://www.cnblogs.com/wxquare/p/4759020.html1 智能指针的作用C++程序设计中使用堆内存是非常频繁的操作,堆内存的申请和释放都由程序员自己管理。程序员自己管理堆内存可以提高了程序的效率,但是整体来说堆内存的管理是麻烦的,C++11中引入了智能指针的概念,方便管理堆内存。使用普通指针,容易造成堆内存泄露(忘记释放),二次释放,程序发生异常时内存泄露等问题等,使用智能指针能更好的管理堆内存。理解智能指针需要从下面三个转载 2021-12-28 23:08:30 · 432 阅读 · 0 评论 -
C:C++ 函数返回多个参数
C/C++ 函数返回多个参数转自:https://blog.csdn.net/onlyou2030/article/details/48174461笔者是 Python 入门的,一直很困惑 C/C++ 中函数如何返回多个参数。如果一个函数需要返回多个参数,可以采用以下两种方法:传引用或指针作为入参,函数体内直接修改地址处的内容第一种方法是将返回值作为写参数。#include <iostream>#include <string>using namespace std;转载 2021-12-25 22:44:11 · 1663 阅读 · 0 评论 -
C++ static关键字
C++ static关键字static关键字可用于声明全局范围、命名空间范围和类范围的变量和函数。 静态变量还可在本地范围声明。先介绍几个概念:静态持续时间,在程序启动时分配对象或变量,并在程序结束时释放对象或变量。外部链接,变量的名称在用于声明变量的文件的外部是可见的。内部链接,名称在用于声明变量的文件的外部是不可见的。默认情况下,在全局命名空间中定义的对象或变量具有静态持续时间和外部链接。**static**关键字常用于以下情况:在全局和/或命名空间范围 (在单个文件范原创 2021-12-25 22:28:21 · 2411 阅读 · 2 评论 -
cmake find_package路径详解
cmake find_package路径详解转自:https://zhuanlan.zhihu.com/p/50829542经常在Linux下面写C++程序,尤其是需要集成各种第三方库的工程,肯定对find_package指令不陌生。这是条很强大的指令。可以直接帮我们解决整个工程的依赖问题,自动把头文件和动态链接文件配置好。比如说,在Linux下面工程依赖了OpenCV,只需要下面几行就可以完全配置好:add_executable(my_bin src/my_bin.cpp)find_packag转载 2021-12-20 17:36:50 · 6171 阅读 · 0 评论 -
Linux下C/C++程序编译链接加载过程中的常见问题及解决方法
Linux下C/C++程序编译链接加载过程中的常见问题及解决方法1 头文件包含的问题报错信息该错误通常发生在编译时,常见报错信息如下:run.cpp:2:10: fatal error: dlpack/dlpack.h: No such file or directory #include <dlpack/dlpack.h> ^~~~~~~~~~~~~~~~~compilation terminated.头文件包含的问题是新手常常会遇到的问题,在这里,我们要先原创 2021-12-16 20:51:23 · 4003 阅读 · 0 评论 -
python解释器
python解释器计算机编程语言本部分参考自:https://zhuanlan.zhihu.com/p/141212114从计算机编程语言说起,它主要分为三类:机器语言、汇编语言、高级语言。机器语言是一种计算机可以直接识别并执行的二进制指令集。由于其可以直接交给CPU执行,所以是最快的,但是它需要我们记住每一个指令的代码与对应的动作,想想我们写代码的时候是操作一串串的01序列,难度得有多大。为了克服机器语言的缺点,人们就用一些助记符来代替机器码,也就是使用一些与实际意义相近的缩略词来代替动作,例如转载 2021-12-08 11:16:47 · 307 阅读 · 0 评论 -
快速排序 C++
快速排序 C++快速排序的思想快速排序是分治思想的典型应用。该排序算法可以原地实现,即空间复杂度为 O(1)O(1)O(1),而时间复杂度为 O(nlogn)O(nlogn)O(nlogn) 。算法将待排序的序列 SSS 分为两个子序列 SLS_LSL 和 SRS_RSR ,随着这种子序列的划分,可以保证问题的规模在不断缩小,即有:max(∣SL∣,∣SR∣)<nmax(|S_L|,|S_R|) < nmax(∣SL∣,∣SR∣)<n并要求左侧子序列 SLS_LSL原创 2021-12-01 18:54:40 · 1155 阅读 · 0 评论 -
Python、C++ lambda 表达式
Python、C++ lambda 表达式lambda函数简介匿名函数lambda:是指一类无需定义标识符(函数名)的函数或子程序。所谓匿名函数,通俗地说就是没有名字的函数,lambda函数没有名字,是一种简单的、在同一行中定义函数的方法。lambda函数一般功能简单:单行expression决定了lambda函数不可能完成复杂的逻辑,只能完成非常简单的功能。由于其实现的功能一目了然,甚至不需要专门的名字来说明。lambda 函数可以接收任意多个参数 (包括可选参数) 并且返回单个表达式的值。la原创 2021-11-30 18:08:03 · 434 阅读 · 0 评论 -
关于C++中的unordered_map和unordered_set不能直接以pair作为键名的问题
关于C++中的unordered_map和unordered_set不能直接以pair作为键名的问题在 C++ STL 中,不同于有序的 std::map 和 std::set 是基于红黑树实现的,std::unordered_map 和 std::unordered_set 是基于哈希实现的,在不要求容器内的键有序,仅要求查找效率较高时,哈希实现的后者时更为合适的,哈希表的运用也经常出现在各种算法题中。但是,我们知道,既然是基于哈希实现的,那么就需要指定哈希函数。对于内置的数据类型如 int,floa原创 2021-11-25 13:50:51 · 3759 阅读 · 2 评论 -
gdb 入门
gdb 入门简介gdb是GNU开源组织发布的一个强大的Linux下的程序调试工具。一般来说,GDB主要帮助你完成下面四个方面的功能:1、启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。2、可让被调试的程序在你所指定的调置的断点处停住。(断点可以是条件表达式)3、当程序被停住时,可以检查此时你的程序中所发生的事。4、你可以改变你的程序,将一个BUG产生的影响修正从而测试其他BUG。gdb可以调试的对象gdb 可以调试的语言Ada, Assembly, C, C++, D, Fo原创 2021-10-16 11:25:09 · 693 阅读 · 0 评论 -
Linux下构建自己的C++共享库并配合pkg-config生成链接选项
Linux下构建自己的C++共享库并配合pkg-config生成链接选项本文将以C++链表的新建、打印操作为例构建自己的共享库,并在实际调试代码时尝试使用。我们在做数据结构题时经常需要将链表打印出来看一下结果,但是并没有一种库函数可以让我们直接调用来打印自己的基于ListNode的链表(LeetCode的题目通常是这样的链表)。因此本文将以此为例,介绍怎样构建自己的动态链接库,并通过pkg-config生成对应的链接选项。生成共享库并添加到环境变量我们的链表库的源代码LinkedList.cpp是这样原创 2021-10-09 20:36:37 · 370 阅读 · 0 评论 -
Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决
Linux下编译、链接、加载运行C++ OpenCV的两种方式及常见问题的解决在Linux下安装完OpenCV C++之后(还没有安装的读者请参考Ubuntu 18.04 安装OpenCV C++),本文将探索Linux下编译、链接C++ OpenCV的两种方式,并且给出笔者在初次尝试时遇到的一些问题的解决方法,各位读者如果链接OpenCV遇到新的问题,也可留言讨论。注意,我们这里并不采用简单的包含进opencv的头文件,然后再main函数中打印个hello world的测试方式。这种测试方式只能测原创 2021-10-08 20:30:41 · 11320 阅读 · 8 评论 -
make命令及makefile
make命令及makefile转自:https://www.ruanyifeng.com/blog/2015/02/make.htmlMake 命令教程作者: 阮一峰日期: 2015年2月20日代码变成可执行文件,叫做编译(compile);先编译这个,还是先编译那个(即编译的安排),叫做构建(build)。Make是最常用的构建工具,诞生于1977年,主要用于C语言的项目。但是实际上 ,任何只要某个文件有变化,就要重新构建的项目,都可以用Make构建。本文介绍Make命令的用法,从简单的讲起转载 2021-09-30 20:39:38 · 3667 阅读 · 0 评论 -
Ubuntu 18.04 安装OpenCV C++
Ubuntu 18.04 安装OpenCV C++仅安装核心模块# 更新并安装依赖sudo apt update && sudo apt install -y cmake g++ wget unzip# 下载并解压包wget -O opencv.zip https://github.com/opencv/opencv/archive/master.zipunzip opencv.zip# 创建并进入编译目录mkdir -p build && cd buil原创 2021-09-30 13:14:40 · 4513 阅读 · 2 评论 -
C/C++ 指针详解
指针详解参考视频:https://www.bilibili.com/video/BV1bo4y1Z7xf/,感谢Bilibili@fengmuzi2003的搬运翻译及后续勘误,也感谢已故原作者Harsha Suryanarayana的讲解,RIP。笔者亲测实验编译器版本:gcc版本gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0Copyright © 2017 Free Software Foundation, Inc.This is free software;原创 2021-09-24 15:40:49 · 15285 阅读 · 17 评论 -
gcc参数 -i, -L, -l, -include
gcc参数 -i, -L, -l, -include-i,-L,-l,-include-l和-L-l参数就是用来指定程序要链接的库,-l参数紧接着就是库名,那么库名跟真正的库文件名有什么关系呢?就拿数学库来说,他的库名是m,他的库文件名是libm.so,很容易看出,把库文件名的头lib和尾.so去掉就是库名了好了现在我们知道怎么得到库名,当我们自已要用到一个第三方提供的库名字libtest.so,那么我们只要把libtest.so拷贝到/usr/lib里,编译时加上-ltest参数,我们就能用上li原创 2021-09-20 22:07:57 · 2220 阅读 · 0 评论 -
linux常用命令--开发调试篇
前言Linux常用命令中有一些命令可以在开发或调试过程中起到很好的帮助作用,有些可以帮助了解或优化我们的程序,有些可以帮我们定位疑难问题。本文将简单介绍一下这些命令。转自:https://www.yanbinghu.com/2018/09/26/61877.html示例程序我们用一个小程序,来帮助后面我们对这些命令的描述,程序清单cmdTest.c如下:#include<stdio.h>int test(int a,int b){ return a/b;}int mai转载 2021-09-16 18:42:01 · 264 阅读 · 0 评论 -
Linux中 C++ main函数参数argc和argv含义及用法
Linux中 C++ main函数参数argc和argv含义及用法简介argc 是 argument count的缩写,表示传入main函数的参数个数;argv 是 argument vector的缩写,表示传入main函数的参数序列或指针,并且第一个参数argv[0]一定是程序的名称,并且包含了程序所在的完整路径,所以确切的说需要我们输入的main函数的参数个数应该是argc-1个;实验直接运行#include <iostream> using namespace std;原创 2021-09-16 12:46:06 · 2700 阅读 · 0 评论 -
联合体(union)的使用方法及其本质
联合体(union)的使用方法及其本质转自:https://blog.csdn.net/huqinwei987/article/details/23597091有些基础知识快淡忘了,所以有必要复习一遍,在不借助课本死知识的前提下做些推理判断,温故知新。1.联合体union的基本特性——和struct的同与不同union,中文名“联合体、共用体”,在某种程度上类似结构体struct的一种数据结构,共用体(union)和结构体(struct)同样可以包含很多种数据类型和变量。不过区别也挺明显:结构体转载 2021-09-06 18:54:25 · 2050 阅读 · 1 评论 -
跟我一起写makefile: 概述、介绍、规则
跟我一起写makefile 概述、介绍、规则转自:https://seisman.github.io/how-to-write-makefile/rules.html概述什么是makefile?或许很多Windows的程序员都不知道这个东西,因为那些Windows的集成开发环境(integrated development environment,IDE)都为你做了这个工作,但我觉得要作一个好的和专业的程序员,makefile还是要懂。这就好像现在有这么多的HTML编辑器,但如果你想成为一个专业人士,转载 2021-09-01 16:28:00 · 270 阅读 · 0 评论 -
从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接
从C源代码到可执行文件的四个过程:预处理、编译、汇编、链接总览我们将在Linux操作系统中,以C语言的Hello World程序为例,用gcc编译器分步执行这四个步骤。我们有再熟悉不过的HelloWorld程序,hello.c:#include <stdio.h>int main(){ printf("Hellow World.\n"); return 0;}预处理预处理阶段 预处理器(cpp)根据以#字节开头的命令,修改原始的C程序,执行预处理命令原创 2021-09-01 16:15:51 · 8313 阅读 · 1 评论 -
Linux中g++与gcc的区别
转自:https://blog.csdn.net/bit_clearoff/article/details/53965514Windows中我们常用vs来编译编写好的C和C++代码;vs把编辑器,编译器和调试器等工具都集成在这一款工具中,在Linux下我们能用什么工具来编译所编写好的代码呢,其实Linux下这样的工具有很多,但我们只介绍两款常用的工具,它们分别是gcc和g++.工具用法介绍 gcc和g++的用法都是一样的,在这里我们只介绍gcc: 上图介绍了相关指令和参数以及该条指令所做的对应的转载 2021-08-25 19:03:27 · 180 阅读 · 0 评论