C/C++
文章平均质量分 81
langb2014
这个作者很懒,什么都没留下…
展开
-
C++二义性问题之Most Vexing Parse
仅供学习,禁止商用。Most Vexing Parse0.导语Most Vexing Parse 翻译为最烦人的解析,在使用 C++11 中 std::thread 创建对象的时候会遇到这种问题,除此之外,也会遇到,本文来看看在哪些场景可以遇到以及在 C++11 标准后的解决方案。1.自己编写一个类假设自己写了这么一个类,我们想调用 copy 构造:class Strin...转载 2020-01-14 11:05:02 · 815 阅读 · 0 评论 -
vs2013的boost安装及配置
1、下载:Boost 1.59.0 并解压后打开bootstrap.bat文件2、双击运行boostrap.bat文件,自动执行完自动关闭,此时会发现文件夹下,增加了bjam.exe文件3、 双击运行该bjam.exe文件,它会自动执行,执行结束自动关闭,boost库初期安装完成。下面就是VS2013的配置了:1.先创建一个控制台空项目boost,然后右击添加文件main.cp原创 2015-10-16 16:30:35 · 5805 阅读 · 0 评论 -
Boost源码学习十一[并发编程](1)
Boost库隔了好久,一直在恶补深度的东西,boost被搁置了相当长时间,现在用到线程这一块的知识了,先补一下。这章学习就是并发编程:这里推介一本书《C++ 并发编程指南》作者可能还没有出刊,如有版权问题,可以删除。先按照该书中的学习一番,然后就很好理解boost中的这些问题了。======================================================原创 2016-01-14 13:58:15 · 1113 阅读 · 0 评论 -
使用gcc和cmake编译工具编辑opencv例子
1、第一步,建DisplayImage.cpp:#include #include using namespace cv;int main(int argc, char** argv ){if ( argc != 2 ){printf("usage: DisplayImage.out \n");return -1;}Mat image;image = imread("te原创 2016-01-24 19:38:31 · 2096 阅读 · 0 评论 -
VS2013生成DLL文件
1、打开VS2013,创建项目,点DLL,输入项目名称,MakeDll,添加新项,来创建头文件MakeDll.h;MakeDll.h#define DLL_API __declspec(dllexport)#includeusing namespace std;DLL_API int add(int a, int b);class DLL_API Point{private:原创 2015-09-12 11:56:16 · 17142 阅读 · 4 评论 -
Boost源码学习二[内存管理二]
内存管理的另一个重要部分技术内存池,Boost库的pool提供了一个内存池分配器,用于管理在一个独立的、大的分配空间里的动态内存分配。Boost库的pool主要适用于快速分配同样大小的内存块,尤其是反复分配和释放同样大小的内存块的情况。使用pool内存池主要有以下两个优点: 1. 能够有效地管理许多小型对象的分配和释放工作,避免了自己去管理内存而产生的内存碎片和效率低下问题。原创 2015-10-23 20:46:14 · 1155 阅读 · 0 评论 -
C++项目中的extern "C" {}
引言在用C++的项目源码中,经常会不可避免的会看到下面的代码:123456789#ifdef __cplusplusextern "C" {#endif /*...*/ #ifdef __cplusplus}转载 2015-12-01 10:05:24 · 689 阅读 · 0 评论 -
static_cast与dynamic_cast转换
一 C语言中存在着两种类型转换:隐式转换和显式转换隐式转换:不同数据类型之间赋值和运算,函数调用传递参数……编译器完成char ch;int i = ch;显示转换:在类型前增加 :(Type)变量 对变量进行的转换。用户显式增加char *pc = (char*)pb;void *ps = (void*)pa;二 C++中的类型转换转载 2015-11-27 15:22:37 · 997 阅读 · 0 评论 -
C++中#if #ifdef及其#define整理
C++中#if #ifdef 的作用 (http://www.cnblogs.com/renyuan/archive/2013/05/22/3092362.html) 一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件才进行编译,也就是对一部分内容指定编译的条件,这就是“条件编译”。有时,希望当满足某条件时对一组语句进行编译,而当转载 2015-08-25 12:50:35 · 7689 阅读 · 0 评论 -
c++类的使用总结
C++类(Class)总结 一、C++类的定义 C++中使用关键字 class 来定义类, 其基本形式如下:class 类名{public://公共的行为或属性 private://公共的行为或属性}; 示例: 定义一个点(Point)类, 具有以下属性和方法: ■ 属性: x坐标, y坐标 ■ 方法转载 2015-11-13 12:26:52 · 3851 阅读 · 1 评论 -
C++ assert
用法:先包含#inlcude 在想用的地方给一句:assert(expression)就可以了。expression是任意有效的逻辑表达式。比如:FILE *fp = fopen("in.txt","r") ;if ( ! fp ){ exit(0) ;}assert(fp != NULL) ;当expression不满转载 2015-10-22 18:33:03 · 917 阅读 · 0 评论 -
Boost源码学习二[内存管理一]下
由于篇幅看着比较长所以把上一篇分成两块了。// instrusive_ptr.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include // 主要介绍的对象——智能指针intrusive_ptr头文件#include // Boost库提供的线程安全的原子计数器#include // 对指针进行静态检查的函数#includ原创 2015-10-23 13:45:50 · 987 阅读 · 0 评论 -
Boost源码学习二[内存管理一]中
接着一篇继续学习智能指针。。。。。。。。第四个学习的是shared_array指针:类摘要:template class shared_array{public: explicit shared_array(T *p = 0); template shared_array(T *p,D d); ~shared_array(); shared_array(原创 2015-10-23 13:27:12 · 1052 阅读 · 0 评论 -
C++ explicit关键字的作用
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // 用C风格的字符串p作为初始化值//…}String s1 = “hello”; //OK 隐式转换,等价于String s1 = String(“hello”);转载 2015-10-22 16:36:46 · 571 阅读 · 0 评论 -
Stochastic gradient descent与Batch gradient descent
梯度下降(GD)是最小化风险函数、损失函数的一种常用方法,下面的h(x)是要拟合的函数,J(theta)损失函数,theta是参数,要迭代求解的值,theta求解出来了那最终要拟合的函数h(theta)就出来了。其中m是训练集的记录条数,j是参数的个数。梯度下降法函数function [k ender]=steepest(f,x,e),需要三个参数f、x和e,其中f为目标函原创 2015-09-07 17:53:54 · 3680 阅读 · 0 评论 -
STL源码剖析 [简单应用总结一]
组件:// 演示STL基本组件//construct//destroy//uninitialized_copy/uninitialized_copy_n//uninitialized_fill/uninitialized_fill_n//get_temporary_buffer/return_temporary_buffer#include #include #include原创 2015-09-14 10:42:43 · 1271 阅读 · 0 评论 -
Boost源码学习十一[并发编程](3)
2 并发与并行的联系和区别与并发相近的另一个概念是并行(Parallel)。和并发所描述的情况一样,并行也是指两个或多个任务被同时执行。但是严格来讲,并发和并行的概念并是不等同的,两者存在很大的差别。下面我们来看看计算机科学家们是怎么区分并发和并行的。1.2.1 Erlang 之父 Joe Armstrong 的观点Erlang 是一种通用的并行程序设计语言,在并行、分原创 2016-01-14 18:51:08 · 1442 阅读 · 0 评论 -
VS2013如何打包生成安装文件
简要说一下大体流程:图片比较容易学习,我就直接把每一步截取的图片当做操作介绍了。1、安装InstallShield2013LimitedEdition,2、找到InstallShield2013LimitedEdition位置3、安装可以看到的界面,点击步骤24、填写一些必要信息,这个激活码留着待会有用,用记事本记录下来也行。5、下载安装之后,重启V原创 2016-03-20 00:11:53 · 20915 阅读 · 3 评论 -
梳理caffe代码sgd_solvers(十五)
新版的caffe就够模块更加规范化了一点,把所有的求解方法都另外分到一个solvers里面,里面有所有的求解方法。那我们就先看看中介部分的sgd_solvers:头文件sgd_solvers.hpp:#ifndef CAFFE_SGD_SOLVERS_HPP_#define CAFFE_SGD_SOLVERS_HPP_#include #include #include "原创 2016-05-24 21:41:32 · 10221 阅读 · 5 评论 -
LeetCode的TWO-SUM(一)
/*Given an array of integers, return indices of the two numbers such that they add up to a specific target.You may assume that each input would have exactly one solution, and you may not use the sam...原创 2018-11-22 20:24:48 · 335 阅读 · 0 评论 -
c++ 强制类型转换
版权归原网站,仅供学习参考。在C++语言中,如果类从包含虚函数的基类派生,则指向基类类型的指针可用于调用派生类对象中包含的虚函数的实现。 包含虚函数的类有时被称为“多态类”。由于派生类完全包含它派生自的所有基类的定义,因此在类层次结构上将指针转换至这些基类中的任何一个是安全的。 提供一个指向基类的指针,在层次结构中向下转换指针可能是安全的。 如果将指向的对象实际上是从基类派生的类型,则是安...原创 2018-09-12 23:33:43 · 7084 阅读 · 0 评论 -
c++练习==>命名空间
废话不多说,假设这样一种情况,当一个班上有两个名叫 Zara 的学生时,为了明确区分它们,我们在使用名字之外,不得不使用一些额外的信息,比如他们的家庭住址,或者他们父母的名字等等。同样的情况也出现在 C++ 应用程序中。例如,您可能会写一个名为 xyz() 的函数,在另一个可用的库中也存在一个相同的函数 xyz()。这样,编译器就无法判断您所使用的是哪一个 xyz() 函数。因此,引入了命名空间这...原创 2018-07-05 19:24:12 · 589 阅读 · 1 评论 -
c++单链表以及双链表
按照https://blog.csdn.net/langb2014/article/details/79805817最后的表的顺序进行梳理。首先看链表之前,结构体嵌套问题:结构体的自引用(self reference),就是在结构体内部,包含指向自身类型结构体的指针。结构体的相互引用(mutual reference),就是说在多个结构体中,都包含指向其他结构体的指针。1. 自引用结构体1.1 不...转载 2018-05-18 14:27:23 · 1102 阅读 · 0 评论 -
理解数组
什么是数组? 简单来说数组代表一块连续的内存,内部包含连续的一排相同的对象, 因为内存分布连续且对象大小相同,所以我们可以高效的根据索引随机访问和赋值。一维数组就象一行字。 二维数组就象一页字。 三维数组就象一本书中的字。 四维数组就象一套书中的字。 五维数组就象书柜中多套书中的字。 六维数组就象图书馆中多个书柜多套书中的字。七维数组是一个省中的所有图书馆藏书中的字。八维数组是一个城市的所有图书馆...转载 2018-04-25 15:56:56 · 1290 阅读 · 0 评论 -
c++中引用、指针、函数的深思
长期一直以来一个困惑,就是引用、指针、函数到底如何快速记忆它们并且使用它们。从它们的存储形式啊还有操作过程啊进行一个简单的初探。首先,从以下几个方面着重的理解一下:1. 变量(variable)的表现形式;2. 指针的结构和原理;3. 引用的结构和原理;4.c语言中函数调用的本质;5. 引用比指针的优越感;6. 链表或者树的操作;一:变量的形式说道变量,很多人...原创 2018-04-04 13:27:55 · 1508 阅读 · 1 评论 -
VS2013生成自己的工程库
什么是程序库?库是写好的现有的,成熟的,可以复用的代码。现实中每个程序都要依赖很多基础的底层库,不可能每个人的代码都从零开始,因此库的存在意义非同寻常。比如你经常使用的STL(Standard Template Library)也是库,有了STL你才能方便地使用std::string、std::cout这些类。本质上来说库是一种可执行代码的二进制形式,可以被操作系统载入内存,被别的转载 2016-09-05 21:10:09 · 4701 阅读 · 0 评论 -
CMake编程(三)
CMD#45 : include 从给定的文件中读取CMake的列表文件。 include( [OPTIONAL] [RESULT_VARIABLE ] [NO_POLICY_SCOPE]) 从给定的文件中读取CMake的清单文件代码。在清单文件中的命令会被立即处理,就像它们是写在这条include命令展开的地方一样。如果指定了OPTIO转载 2017-04-07 14:56:49 · 2697 阅读 · 0 评论 -
CMake编程(二)
CMD#29:find_file 查找一个文件的完整路径。 find_file( name1 [path1 path2 ...]) 这是该命令的精简格式,对于大多数场合它都足够了。它与命令find_file( name1 [PATHS path1 path2 ...])是等价的。 find_file( name | NAM转载 2017-04-07 14:53:28 · 1226 阅读 · 0 评论 -
CMake编程(一)
经常看到一些工程中使用CMake命令,是一个有用的工具,这里推荐两个不错的链接。http://www.cnblogs.com/coderfenghc/tag/cmake/http://hahack.com/codes/cmake/下面是CMake命令和CMake变量,转载自第一个链接。CMake 2.8.3共有80条命令,分别是:add_custom_command转载 2017-04-07 14:50:25 · 2794 阅读 · 0 评论 -
TensorFlow中的SWIG实现Python调用C/C++代码
SWIG是个帮助使用C或者C++编写的软件能与其它各种高级编程语言进行嵌入联接的开发工具。SWIG能应用于各种不同类型的语言,包括常用脚本编译语言,例如Perl, PHP, Python, Tcl, Ruby 和 PHP。SWIG普遍应用于创建高级语言解析或汇编程序环境、用户接口、作为一种用来测试C/C++或进行原型设计的工具。工作中碰到了一个小问题:有一个加密/解密的程序原本转载 2017-01-05 18:51:45 · 5329 阅读 · 0 评论 -
LeetCode
最近发现有必要好好刷刷Leetcode先占个坑LeetCode Algorithm(Notes: "♥" means you need to buy a book from Leetcode)#TitleSolutionDifficulty415Add StringsC++Easy414Third Ma原创 2016-12-05 18:18:28 · 2107 阅读 · 0 评论 -
C++ 命名空间整理
1.using:为了避免每次都使用名字空间是都要其进行名字空间限定可以使用using对名字空间内的内容进行特定区域的声明using A::T;//using 声明再次使用可以直接调用名称而无需增加空间限定2.using:作为编译指令的使用,使对应名字空间内的所有内容可用且使用时可以省略作用域解析运算符using namespace A;注意事项:一,避免歧义using A::T原创 2016-11-19 13:14:34 · 2949 阅读 · 1 评论 -
VS2013多工程开发
首先看一下的生成结果:再看一下所有工程统一输出一个lib:==================================创建方法=======================================================创建一个多工程项目新建Project添加到已有Solution中,File->New->Project… 打原创 2016-09-07 11:25:20 · 4103 阅读 · 1 评论 -
__declspec(dllimport)的作用
作者:朱金灿来源:http://blog.csdn.net/clever101/ 是时候总结一下__declspec(dllimport)的作用了。可能有人会问:__declspec(dllimport)和__declspec(dllexport)是一对的,在动态链接库中__declspec(dllexport)管导出,__declspec(dllimport)管转载 2016-09-05 10:54:30 · 902 阅读 · 0 评论 -
STL源码剖析 [算法](三)[stl_function.h]
/*stl_function.h @功能,functor相关测试效果。函数对象函数适配器环境,win7-vs2013*//* NOTE: This is an internal header file, included by other STL headers. * You should not attempt to use it directly. */#ifndef原创 2015-09-14 10:27:11 · 1491 阅读 · 0 评论 -
STL源码剖析 [算法](二)[stl_algo.h]
前面在stl_algobase.h介绍了基本的几个算法了,接下来看一下一些经常用到的有价值的几十种算法,这些算法需要使用才能够熟练掌握,我这里就把源码直接盗过来了。stl_algo.h源码:// Filename: // Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.c原创 2015-09-14 10:04:14 · 899 阅读 · 0 评论 -
STL源码剖析 [容器](十)[Binary search tree]
本文的译文来自:http://www.cnblogs.com/dskit/archive/2012/08/18/2645927.html本文原文来自维基百科:https://en.wikipedia.org/wiki/Binary_search_tree***************************************************************原创 2015-08-30 16:36:03 · 1062 阅读 · 0 评论 -
STL源码剖析 [容器](八)[priority_queue]
priority_queue,首先它是一个queue,即只允许在低端加入元素,并从顶端取出元素,除此之外别无其他存取元素的途径(故priority_queue不提供遍历功能,也不提供迭代器);再次它具有priority,即queue中的元素具有一定的priority:其内的元素自动依照元素的权值排列,权值最高者(也就是数值最高),排在最前面。注:在queue并非是依照严格的权值递减的顺序排列,而是原创 2015-08-30 15:12:35 · 632 阅读 · 0 评论 -
STL源码剖析 [容器](五)[stl_stack.h]
stack比较简单,不需要太多的说明,直接看一下详细的源码说明:// Filename: stl_stack.h// Comment By: 凝霜// E-mail: mdl2009@vip.qq.com// Blog: http://blog.csdn.net/mdl13412////////////////////////////////////原创 2015-08-30 11:54:24 · 554 阅读 · 0 评论 -
STL源码剖析 [容器](三)[stl_list.h]
这篇介绍的是list容器,学习list首选需要预备知识就是排序算法sort:http://blog.csdn.net/chenhanzhun/article/details/39337331这篇文章解释的非常清晰。===================================================================然后继续我们的stl_list.h源码:原创 2015-08-29 13:37:40 · 574 阅读 · 0 评论