c/c++ 技巧
文章平均质量分 78
老潘的博客
老潘的博客,程序员眸中的fantasy life,分享AI技术干货,让大家少走弯路~
展开
-
C++中namespace的作用
C++作用域的主要用法就是减少名称互相冲突性的可能性。这个名称可以是变量、可以是函数、可以是类名称也可以是等等等等,总之是有名字的东西。因此标准C++引入关键字namespace(命名空间/名字空间/名称空间),可以更好地让我们控制标识符的作用域。来看下使用规则。一般的用法//定义一个名字为A的命名空间(变量、函数)namespace A { int a = 100;}namespace B { int a = 200;}void test(){ //A::a原创 2021-08-30 11:04:38 · 545 阅读 · 1 评论 -
APPLE-M1使用VSCODE调试lldb无法正常使用
最近使用Mac-mini-m1芯片的电脑在debug代码。使用的VSCODE进行调试,launch.json也设置好了,但是启动调试的时候总会出现:ERROR: Unable to start debugging. Unexpected LLDB output from command "-exec-run". process exited with status -1 (attach failed)这样的问题。不过在VSCODE外头通过lldb ./demo是可以的。不过还是找到了解决方案…在M1芯原创 2021-08-29 12:07:27 · 3367 阅读 · 3 评论 -
TensorRT详细入门指北,如果你还不了解TensorRT,过来看看吧
首发于TensorRT详细入门指北,如果你还不了解TensorRT,过来看看吧!,最新回复以及交流请看这里~前言大名鼎鼎的TensorRT有多牛逼就不多说了,因为确实很好用。作为在英伟达自家GPU上的推理库,这些年来一直被大力推广,更新也非常频繁,issue反馈也挺及时,社区的负责人员也很积极,简直不要太NICE。只是TensorRT的入门门槛略微高一点点,劝退了一部分玩家。一部分原因是官方文档也不够详细(其实也挺细了,只不过看起来有些杂乱)、资料不够;另一部分可能是因为TensorRT比较底层,需原创 2021-06-14 17:03:21 · 10325 阅读 · 5 评论 -
利用VScode和cmake编译构建C++工程代码
前言可能我们有时候已经习惯了使用大型IDE去编写一些C++工程,经常使用大型IDE例如VS、Clion、VC++6.0,这些大型的软件都已经为我们提供好了编译链接工具,我们不需要自己去手动设置编译器,也不需要了解相关知识就可以写代码进行编译运行。但有时候我们还需要去了解这些知识,虽然可能与编写代码关系不大,但是当我们实际拿大型工程落地时,这些技能就是必要的。当然本文并不是要详细讲解make、cmake等工具的使用,这篇文章主要是借助VSCODE这个非常灵活的平台,利用cmake工具完整地过一边代码,并原创 2021-01-31 17:32:07 · 6071 阅读 · 2 评论 -
如何对Pytorch进行“深入”的DEBUG
前言我们对Pytorch的debug一般都是在python端进行,这对于一般搭建模型的任务来说足够了。但如果我们需要对Pytorch进行一些修改或者研究一下机器或深度学习系统是如何搭建的,想要深入探索就必须涉及到C++的源码层面。举个栗子,例如torch.rand(3, 4)这个函数,在Python我们无法通过python端debug进入其内部实现,也无法找到其定义,自然也无法探索其具体的实现细节,所以,为了更好地对Pytorch进行探索和调试,有必要对Pytorch的C++部分进行debug。准备工原创 2021-01-30 21:08:36 · 3036 阅读 · 0 评论 -
一个Tensor的生命历程(Pytorch版)
文中涉及到大量的Pytorch的C++源码,版本为1.4.0,适合有一定Pytorch源码基础的童鞋观看,同时也涉及到一些python中的C/C++拓展的一些基础知识,其中每一段代码的第一行表明了该代码的文件位置。需要注意有些代码是自动生成的,原始工程中并没有,需要对pytorch源码编译后才会生成出来。还要注意一点,因为Pytorch仍在积极开发中,可能代码接口变化还是比较频繁。当你看到本文的时候,有可能展示的源码与master版的略有不同,但是大部分的代码逻辑变动不大,我们只需要知道核心工作原理即可原创 2021-01-30 18:10:47 · 1171 阅读 · 0 评论 -
父类指针、类多态以及dynamic_cast需要注意的地方
拉拉拉,大家晚上好。老规矩,欢迎大家来访:oldpan.me ,这里回复更及时。好了正文开始吧~什么是父类指针父类指针也可以称为基类指针,当父类(基类)指针指向派生类(子类)指针的时候,可以触发“多态的效果”。不过本文的重点不在“多态”,而是聊聊当父类指针和子类指针互相赋值时需要注意的问题。废话不多说,直接看代码~假设我们有两个类,一个是Base父类,另一个是Derived子类。class Base //父类{public: virtual int fun() ; // 虚函数}原创 2021-01-12 22:16:11 · 630 阅读 · 1 评论 -
利用Pytorch的C++前端(libtorch)读取预训练权重并进行预测
关于本文章的最新更新请查看:oldpan博客看起来明天(2018-12-7)会发布Pytorch-1.0的稳定版。前言距离发布Pytorch-1.0-Preview版的发布已经有两个多月,Pytorch-1.0最瞩目的功能就是生产的大力支持,推出了C++版本的生态端(FB之前已经在Detectron进行了实验),包括C++前端和C++模型编译工具。对于我们来说,之后如果想要部署深度学习应用...原创 2018-12-17 21:43:29 · 13955 阅读 · 13 评论 -
解决windows10下安装dlib与face-recognition的问题
github中相关问题解决方法:https://github.com/ageitgey/face_recognition/issues/175#issue-257710508 对于安装face-recognition在window的方法,在dlib的github中的issue中已经有人进行了回答,但是回答者较为复杂,且有些步骤可以简化一下。问题原因安装face-recognition需要原创 2018-02-02 21:21:53 · 8191 阅读 · 1 评论 -
C++:STL常用模块总结(map)
mapmap又称为哈希表,是一个由标记值(key value)和映射(mapped value)组成的关系列表,其中标记值将映射值进行排序和整理,每一个标记值对应着一个映射值,map在通过标记值找到映射值的过程比unordered_map慢,但是可以通过指针依照排放顺序来进行操作。使用之前引用#include <map>定义方法重载函数汇总empty (1): explicit map (con原创 2017-12-03 22:11:37 · 637 阅读 · 0 评论 -
C++:STL常用函数模块总结(vector)
所有资料来源于http://www.cplusplus.com/reference/,至于STL不介绍了,想了解的童鞋们直接百度吧,这里只总结常用模块的介绍和用法vector容器相当于可变数组,相比于数组占用更多的空间(额外空间以备扩容使用),和数组一样直接访问元素。但是在中间位置(不是末尾)使用插入操作和删除操作时表现的不是很好。使用时添加:#include <vector>using nam原创 2017-10-08 13:21:05 · 2102 阅读 · 0 评论 -
Mac下Clion编译错误:Undefined symbols for architecture x86_64
在使用CLion做LeetCode题编译时,突然出现了一下的情况:Undefined symbols for architecture x86_64: "Solution::isCommonPrefix(std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<ch原创 2017-10-17 10:58:55 · 10091 阅读 · 0 评论 -
C++:STL常用函数模块总结(set)
SetSets是一个储存元素的容器,其中每个元素最多只出现一次,元素的遵循一个特定的顺序。元素一旦被放入次容器将不能被修改(修改元素的值),但是可以对元素进行插入和移除操作。Set内部的元素遵循严格弱排序,因此在寻找元素的时候比unordered_map稍微慢一些,但是可以直接通过指针操作子分组,set是一个典型的二分搜索树的应用。定义程序#include <iostream>#include <原创 2017-10-23 10:30:25 · 709 阅读 · 0 评论 -
STM32之位绑定
STM32之位绑定 有32个美女给你,你32个一起处理是不是有点棘手呀??没事、、那就一个一个“慢慢”来、、为何我这里慢慢要加双引号?因为其实处理一个比处理32个要快很多很多、、好,停住这美好的遐想,来认识下《位绑定》的“地盘”。 位绑定的概念:对于51单片机只有8位,对于M3来说,有32位,也就是说把32位中的某一位通过一个简单的地址的变换的算法来实现转载 2014-07-20 09:53:49 · 829 阅读 · 0 评论 -
C语言中使用大括号与给函数命名的正确方法(转载)
使用大括号的正确方法:在C中,使用大括号的方法无所谓对还是错——只要每个开括号后都有一个闭括号,你的程序中就不再会出现与大括号有关的问题。然而,有三种著名的大括号格式经常被使用:Kernighan和Ritchie,Allman,Whitesmiths。下文中将讨论这三种格式。在《C程序设计语言(The C Programming Language)》一书中,Brian Kernigha转载 2014-07-30 16:42:58 · 1797 阅读 · 0 评论 -
C/C++程序编译流程(预处理->编译->汇编->链接)
程序的基本流程如图:1. 预处理预处理相当于根据预处理指令组装新的C/C++程序。经过预处理,会产生一个没有宏定义,没有条件编译指令,没有特殊符号的输出文件,这个文件的含义同原本的文件无异,只是内容上有所不同。读取C/C++源程序,对其中的伪指令(以#开头的指令)进行处理①将所有的“#define”删除,并且展开所有的宏定义②处理所有的条件编译指令,如:“#if”、“#ifdef”、“#elif”、转载 2017-09-10 18:28:53 · 341 阅读 · 0 评论 -
Effective C++笔记简易总结以及程序演示
5、了解并拒接默默调用的函数空类并不是空类,C++编译器会自动为其声明一个copy构造函数、一个copy assignment操作符和一个析构函数,如果你没有声明任何构造函数,那么编译器也会为你声明一个default构造函数(这些函数都是public且inline的)。这些会引起一些比较容易忽视的问题:比如通过copy assignment操作符去给一个类赋值一个拥有不能进行赋值成员的类时会引起编译原创 2017-10-11 22:06:21 · 368 阅读 · 0 评论 -
C与指针课后答案与编程练习(第一章)
1.7问题1.空白规则很大程度影响程序的美观性,就如python强制要求缩进行一样,良好的缩进可以大大提高程序的可读性,是写一个程序必不可少的环节。所以说空白使用规则很重要,也很必要。2.这样说可以将不同模块的程序分类放置,就和书的目录一样,需要时#include目录就行,然后需要的内容里面都有,尤其在大型程序时,将不同的函数分别变为模块,调用就用include,程序就会变得井井有条。3.方便修改,原创 2017-10-27 09:46:28 · 4750 阅读 · 0 评论 -
C与指针课后练习与编程答案(不断更新)
不知第几遍看C与指针了,这么一本不厚的书却感觉将C语言的精髓讲了出来,这本书或许不是最适合入门的C语言,但却是不可多得讲C语言讲的精彩的书。重温一遍C与指针,学习一门编程语言不光在于使用,也在于不断回顾一些基础知识,在这里把C与指针的答案汇总出来,也加一些自己的感觉,希望和大家共同学习,共同共勉!第一章:原创 2017-10-25 23:03:10 · 6448 阅读 · 0 评论 -
Effective C++ 笔记(2):尽量以const,enum,inline替换#define
条款二(clause 2) 尽量使用const,enum,inline替换#define(以编译器替换预处理器)1、使用const替换#define通常替换#define NUM 3.14为const double Num = 3.14;//大写名称用于宏,这里改变写法其中有两种特殊情况: 1、定义常量指针(往往放在头文件中)两种写法:const char* const authorName原创 2017-09-11 11:07:39 · 560 阅读 · 0 评论 -
Effective C++ 笔记(1):视C++为语言联邦
仅为笔记,只挑重点。条款一(clause 1) 将C++视为语言联邦:提出了一种将C++分为四种不同次语言的观念,四种次语言分别是:1、C语言,面向过程的语言,C++完全向下兼容C,在C++中单纯使用C语言的语法除了遵守的一些规则不同其他的都一样; 2、Object-Oriental C++:面向对象的C++语言,这个就是C with Class所需求的,也是C++和C之间中重要的区别;原创 2017-09-10 18:26:07 · 635 阅读 · 0 评论 -
学习C语言的必备书籍-从入门到精通
学习好并精通C语言是成为优秀程序员的首要要求,在这里推荐一些学习C语言从小白到高手的必看书籍。也是我几年来收集的一些精华本。入门:1、大学C语言教材不同学校教材不通,大部分书都把C语言的基本内容讲出来了,不推荐谭浩强的C语言书,如果仅仅是当第一本C语言书是可以的。2、C语言程序设计(第二版)/The C Programming Language/Kernighan比较经典的c语言书籍,个人觉得可以原创 2017-10-27 22:18:11 · 20515 阅读 · 7 评论 -
C++:STL常用函数模块总结(算法algorithm)
algorithm一些已经编好的对一系列元素进行操作的函数集合(如排序,交换,计数等)1、std::sort:具有排序的功能default (1) template <class RandomAccessIterator> void sort (RandomAccessIterator first, RandomAccessIterator last);custom (2) templa原创 2017-10-23 09:48:26 · 955 阅读 · 0 评论 -
你可能会感兴趣的 5 个隐藏的 C++ 语言特性
一天又一天,C++ 是越来越火起来了. 作为一种范式覆盖语言,C++的这些隐藏特性基本上就基本上只是对其现有的基础设施的灵活使用. 其实还有更多的这样的设施,而我们也乐于听见读者对此能够有所补充.#1. 众所周知的三元运算符 (?:), 许多人并没有意识到它可以作为左值来使用.x = (y (a == 0 ? a : b) = 1;不这样的话,你就只能得像下面这样写了,转载 2014-07-15 17:59:37 · 435 阅读 · 0 评论