
C/C++
文章平均质量分 55
Mr_John_Liang
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Windbg调试c++内存泄漏
c++内存泄漏问题定位内存泄漏指的是直接操作内存分配构造函数(例如new,malloc,HeapAlloc)来获得堆内存后,但是没有释放而导致的泄漏问题。我们的行情服务器是一个长期运行在客户服务器上的应用程序,如果存在内存泄漏,那么当内存增长到某个值时,会极大地影响当前机器的性能,直至影响我们的行情服务程序,甚至由于内存已不够而导致的程序崩溃。因此我们需要掌握内存泄漏问题的基本调试技...转载 2019-11-05 17:43:47 · 1669 阅读 · 0 评论 -
时间字符串和时间戳互转
#include <iostream>#include <string>#include <iomanip>using namespace std;// 时间字符串转时间戳time_t TimeStringToTimestamp(string strTime){ struct tm tmTime; sscanf(strTime...转载 2019-10-30 11:11:50 · 1138 阅读 · 0 评论 -
C++模板偏特化
C++类模板C++ 2008-08-21 15:07:34 阅读361 评论0 字号:大中小 订阅 (1) 类模板特化有时为了需要,针对特定的类型,需要对模板进行特化,也就是特殊处理.例如,stack类模板针对bool类型,因为实际上bool类型只需要一个二进制位,就可以对其进行存储,使用一个字或者一个字节都是浪费存储空间的.templat转载 2013-04-07 11:52:57 · 756 阅读 · 0 评论 -
fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突——我的解决方案(转载)
win7 下,安装的VS2008,然后搭配opencv2.3.1运行,报错为:fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突 。通过网上查询,给错的答案大同小异,但是依然有很多朋友按照网上的答案无法解决这个问题,一下是我的解决方案,仅供参考:1、原因:win7下的64位系统,在运行程序的时候,需要的DLL必须是64位系统编译的,VS2008转载 2013-04-07 11:53:59 · 1952 阅读 · 0 评论 -
Error spawning cl.exe的解决方法!很有用!!
(转)Error spawning cl.exe的解决方法!很有用!!2009-02-20 00:07 6268人阅读 评论(10) 收藏 举报microsoftlibraryincludec编译器build最近用VC6.0时常常出现这个问题,不知道怎么解决,在百度知道上得到了一个相当详细的答案,终于解决了,觉得很有用,所以转了过来。================转载 2013-03-28 08:50:07 · 2836 阅读 · 3 评论 -
memmem 函数
memmem 函数 2011-06-02 10:29:18| 分类: 专业知识 |字号 订阅软件研发的面试,除了架构设计和算法之外,还有一类看似简单的问题,但是也挂了相当一部分人,就是让写一些简单例程,比较典型的是要求实现C的一些库函数,比如我曾碰见让当场写一个strcat,一般只要细心一点,还是比较简单的,不过一般来讲在你写出以后,会有一些后续问题,比如递归改非递转载 2013-04-12 11:37:51 · 5720 阅读 · 0 评论 -
深入new/delete:New的3种形态
New的3种形态:new operator、operator new、placement newnew 操作符(new 表达式, newoperator, new expression): 通常我们调用 X * pX = new X 时使用的就是这个操作符, 它由语言内建, 不能重载, 不能改变其行为. 它包括分配内存的 operator new 和调用构造函数的 placement转载 2013-04-12 11:38:58 · 615 阅读 · 0 评论 -
c++中怎么判断一个string类型的字符串变量是否为数字?
#include #include #include using namespace std;bool isnum(string s){ stringstream sin(s); double t; char p; if(!(sin >> t)) return false;转载 2013-04-22 14:08:16 · 3722 阅读 · 0 评论 -
关于wchar_t 的输出及 wchar_t* 与 char*之间的相互转换
wchar_t 定义的变量之所以不能输出呢?我查了一下资料,就是说宽字符类型要本地化,否则输不出想要结果。本地化有三条语句可以使用,任取其一。最后一句是全局函数,前两个是wcout的一个成员函数的两种表达方式。std::wcout.imbue(std::locale("chs"));std::wcout.imbue(std::locale(""));setlocale(LC_ALL转载 2013-04-23 18:13:38 · 4646 阅读 · 0 评论 -
自定义编译规则
Understanding Custom Build Rules in Visual C++ 2005: Building Flex and Bison Files from the IDEVisual Studio 2005Marian LuparuMicrosoft CorporationMay 2006Applies to:Microsoft Visual C转载 2013-04-24 15:54:33 · 1787 阅读 · 0 评论 -
C++ delete错误
const char *c_str();c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过string类对象的成员函数c_str()把string 对象转换成c中的字符串样式。注意:一定要使用strcpy()函数 等来操作方法c_str()返回的指针 比如:最好不要这样: char*转载 2013-04-17 19:17:33 · 835 阅读 · 0 评论 -
字符串分割(C++)
字符串分割(C++) 经常碰到字符串分割的问题,这里总结下,也方便我以后使用。一、用strtok函数进行字符串分割原型: char *strtok(char *str, const char *delim);功能:分解字符串为一组字符串。参数说明:str为要分解的字符串,delim为分隔符字符串。返回值:从str开头开始的一个个被分割的串。当没有被分割的串转载 2013-04-22 09:38:59 · 625 阅读 · 0 评论 -
C++程序怎样调用exe可执行文件
在开发项目的时候,有的时候会分开来开发,分开的有时是exe文件,有的时候也会调用现成的工具包里面的一些exe文件,这样在项目里面就要通过调用exe文件来使用。那么在C++里面直接调用exe文件的方法有哪些呢?现在可考虑的方法主要有:a.使用system函数b.使用exec或者是execv函数c.使用WinExec函数d.使用CreateProcess函数转载 2013-05-07 09:17:57 · 1272 阅读 · 0 评论 -
c++中关于智能指针std::tr1::shared_ptr的用法
智能指针本身绝对不能是动态分配的内存,不然智能指针就没有存在的意义了。智能指针有个数据成员,是个指针,至于什么类型,看你类模板怎么实现。这个指针才是动态分配内存的。只能本身必须是栈里分配内存。利用栈的自动回收数据的特性,在被系统西东回收时,调用智能指针类的析构函数,从而释放智能指针内部那个指针型数据成员所指向的内存。举个例子std::shared_ptr p = std::shared_转载 2013-05-08 10:05:43 · 1706 阅读 · 0 评论 -
内存泄露
在编程时进行动态内存分配是非常必要的。它可以在程序运行的过程中帮助分配所需的内存,而不是在进程启动的时候就进行分配。然而,有效地管理这些内存同样也是非常重要的。在大型的、复杂的应用程序中,内存泄漏是常见的问题。当以前分配的一片内存不再需要使用或无法访问时,但是却并没有释放它,那么对于该进程来说,会因此导致总可用内存的减少,这时就出现了内存泄漏。尽管优秀的编程实践可以确保最少的泄漏,但是根据经验,当转载 2013-05-21 11:17:13 · 1013 阅读 · 0 评论 -
C++中char*与wchar_t*之间的转换
关于C++中的char*与wchar_t*这两种类型的相互转换,网上说的大多很繁琐,可行性也不高。下面这个方法是在MSDN里面找到的,个人认为还比较不错: 把char*转换为wchar_t*用stdlib.h中的mbstowcs_s函数,可以通过下面的例子了解其用法: char *CStr = "string to convert";size_t l转载 2013-05-28 16:43:10 · 1400 阅读 · 0 评论 -
c++ 如何获取系统时间
c++ 如何获取系统时间2008-04-28 15:34//方案— 优点:仅使用C标准库;缺点:只能精确到秒级 #include #include int main( void ) { time_t t = time(0); char tmp[64]; strftime( tmp, sizeof(tmp), "%Y/%m/%d %X %A 本年第%j天 %z转载 2013-05-16 08:58:21 · 839 阅读 · 0 评论 -
strcpy与memcpy的区别
strcpy和memcpy都是标准C库函数,它们有下面的特点。strcpy提供了字符串的复制。即strcpy只用于字符串复制,并且它不仅复制字符串内容之外,还会复制字符串的结束符。已知strcpy函数的原型是:char* strcpy(char* dest, const char* src);memcpy提供了一般内存的复制。即memcpy对于需要复制的内容没有限制,因此用途更广。转载 2013-05-30 14:11:12 · 587 阅读 · 0 评论 -
extern "C" __declspec(dllexport)
一、__declspec(dllexport): 将一个函数声名为导出函数,就是说这个函数要被其他程序调用,即作为DLL的一个对外函数接口。 通常它和extern "C" 合用,形式如下:extern "C"{__declspec(dllexport) RETURN_TYPE FUNCTION(){}} 这是由于在转载 2013-06-07 12:08:01 · 4711 阅读 · 0 评论 -
SQLite3 C/C++编程接口介绍
本文介绍一下SQLite C/C++接口。早期的SQLite C/C++接口只有5个接口函数, 很容易学习。 新版本的SQLite新增了很多功能, 目前大概有185个API接口。本文介绍一些核心的API接口和对象。1. 核心对象 数据库连接对象: sqlite3prepared_statement对象: sqlite3_stmt严格的讲 sqlite3_stmt对象也不是必须的转载 2013-08-22 12:35:55 · 1156 阅读 · 0 评论 -
STL中map用法详解
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的,后边我们会见识到有转载 2013-08-22 10:56:37 · 554 阅读 · 0 评论 -
C/C++记录程序运行时间的类
#ifndef CLK_TCK#define CLK_TCK CLOCKS_PER_SEC#endiftemplateclass TimerRunBase{public:TimerRunBase() : iStart(0), iStop(0) {}~TimerRunBase() {}void Start(){iStop = iStart = _T转载 2013-08-26 09:42:53 · 709 阅读 · 0 评论 -
STL中vector、list、deque和map的区别
1 vector 向量 相当于一个数组 在内存中分配一块连续的内存空间进行存储。支持不指定vector大小的存储。STL内部实现时,首先分配一个非常大的内存空间预备进行存储,即capacituy()函数返回的大小,当超过此分配的空间时再整体重新放分配一块内存存储,这给人以vector可以不指定vector即一个连续内存的大小的感觉。通常此默认的内存分配能完成大部分情况下的存储。转载 2013-08-26 17:02:46 · 703 阅读 · 0 评论 -
STL容器:vector
1. 概念 vector是一种序列式容器,所谓序列式容器,即其中的元素可以排序,但是并未排序。可以把vector可作为加强版的array,它和array一样,存储空间是一段连续的内存,因此支持随机访问,但是,和array相比,vector支持动态增加数据。vector支持动态增加数据,同时又需要保持空间的连续性从而支持随机访问,因此,在对vector动态增加元素时,如果旧有空间装满,需转载 2013-08-27 09:19:32 · 696 阅读 · 0 评论 -
Stl--Vector
第一部分使用入门vector可用于代替C中的数组,或者MFC中的CArray,从许多说明文档或者网上评论,一般一致认为应该多用vector,因为它的效率更高,而且具备很好的异常安全性。而且vector是STL推荐使用的默认容器,除非你知道你有特殊需要,使用vector不能满足你的需求,例如需要容器在head和tail高效的插入和删除,或者在任何位置高效的删除和插入操作,那么你可能使用deque转载 2013-08-27 09:22:32 · 667 阅读 · 0 评论 -
C++字符串详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题………首先,为了在我们的程序中使用转载 2013-08-28 14:58:35 · 690 阅读 · 0 评论 -
应用程序无法正常启动0xc0150002 解决方案
我也遇到过此问题,解决办法:方案一: 在项目的“属性|配置属性|链接器|常规”中的“启用增量链接”选择“否”。此方法阻断了问题产生的源头,其每次生成exe文件时都直接嵌入清单文件,而不是默认的根据时戳而决定是否更新清单文件。方案二:不嵌入清单文件。在项目的“属性|配置属性|清单工具|输入和输出”中的“嵌入清单”选择“否”,从而在生成exe文件时附随生成一个清单文件(默认情况下,其文件名为e转载 2013-08-30 23:02:48 · 5569 阅读 · 0 评论 -
关于Singleton模式中的Double Check机制
在多线程环境下,使用Singleton模式很重要的一点就是要保证用Double Check机制保证线程安全。很多时候, 我们通常需要使用singleton模式来保证对象实例的唯一性。通常我们是这么写的:class Singleton{private: static Singleton *instance;public: static Singleton*转载 2013-09-07 15:27:52 · 1167 阅读 · 0 评论 -
设计模式C++实现(1)——工厂模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍工厂模式的实现。 工厂模式属于创建型转载 2013-09-07 15:29:37 · 570 阅读 · 0 评论 -
关于C++ const 的全面总结
C++中的const关键字的用法非常灵活,而使用const将大大改善程序的健壮性,本人根据各方面查到的资料进行总结如下,期望对朋友们有所帮助。Const 是C++中常用的类型修饰符,常类型是指使用类型修饰符const说明的类型,常类型的变量或对象的值是不能被更新的。 一、Const作用 如下表所示:No.作用说明参考代码转载 2013-08-31 19:38:57 · 557 阅读 · 0 评论 -
C++拷贝构造函数(深拷贝,浅拷贝)
对于普通类型的对象来说,它们之间的复制是很简单的,例如:int a=88;int b=a; 而类对象与普通对象不同,类对象内部结构一般较为复杂,存在各种成员变量。下面看一个类对象拷贝的简单例子。#include iostream>using namespace std;class CExample {private: int a;pu转载 2013-09-03 10:46:50 · 516 阅读 · 0 评论 -
C++字符串详解
之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题………首先,为了在我们的程序中使用转载 2013-09-04 11:23:06 · 590 阅读 · 0 评论 -
C++堆内存和栈内存详解
堆:顺序随意栈:先进后出堆和栈的区别一、预备知识— 程序的内存分配 一个由c/C++ 编译的程序占用的内存分为以下几个部分 1 、栈区( stack ) — 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈 2 、堆区( heap )转载 2013-09-04 14:21:27 · 804 阅读 · 0 评论 -
五个好的C语言编程实践
前几天,我看到一个关于编程语言的调查,我发现到目前为止,C 编程语言在全球开发者中仍然稳居前三。如此多的代码使用C来编写,我想分享我多年学习总结的一些好的C语言编程实践。 不要使用gets()和strcpy()再也不要使用诸如gets()、strcpy()、sprintf()等等这些函数,这已经是一个广为人知的一个事实,但这些函数仍然在库中,以用来支持那些已经使用这些函数的代码。如果你转载 2013-09-04 15:42:07 · 865 阅读 · 0 评论 -
snprintf linux 与 windows下差异
一次移植,将windows下的某个程序移植到linux下,在运行测试阶段,发现存在部分字符丢失的问题,查找原因,发现原来windows下的_snprintf与linux下的snprintf 存在一定的差异。 linux下 sprintf会自动在后面加'/0',同时copy的长度也包含了‘/0’; snprintf的man中有如下解释: Th转载 2013-09-04 15:46:05 · 858 阅读 · 0 评论 -
常见hash算法的原理
散列表,它是基于快速存取的角度设计的,也是一种典型的“空间换时间”的做法。顾名思义,该数据结构可以理解为一个线性表,但是其中的元素不是紧密排列的,而是可能存在空隙。散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。转载 2013-09-11 09:56:38 · 1130 阅读 · 0 评论 -
STL—vector删除重复元素
STL提供了很多实用的算法,这里主要讲解sort和unique算法。 删除重复元素,首先将vector排序。sort( vecSrc.begin(), vecSrc.end() ); 然后使用unique算法。 vecSrc.erase( unique( vecSrc.begin(), vecSrc.end() ), vecSrc.end() );unique返回值是重转载 2013-09-12 09:37:50 · 1953 阅读 · 0 评论 -
Linear hashing 线性哈希表
Section 1:问题描述最近在阅读分布式数据库的相关资料, 资料中提到分布式数据库中需要解决大数据如何高效存储的问题。分布式或并行数据存储数据结构的设计:(1) 需要具有良好的扩展性(scalability),能够支持大规模数据存储(2) 不允许在不同数据节点上产生数据分布不均衡的问题,即避免产生“hotspot nodes”.(3) 在存储数据增加或者缩减的情况下能够动态转载 2013-09-12 14:12:28 · 1560 阅读 · 0 评论 -
Apache中的文件与目录(1)
4.1文件概述文件I/O在Unix下占据着非常重要的地位,曾有一句经典语句绝对可以说明file在Unix下的重要性, "In UNIX, everything is a file",APR就是本着这个思想对Unix文件I/O进行了再一次的抽象封装,以提供更为强大和友善的文件I/O接口。APR File I/O源代码的位置在$(APR_HOME)/file_io目录下针对不同类型的操转载 2013-09-23 12:15:46 · 857 阅读 · 0 评论 -
apache中的文件与目录(2)
4.4 打开文件文件打开应该是使用的最多的文件操作了,任何文件在使用之前都必须首先打开。ANSI C标准库和Unix系统库函数都提供对“打开文件”这个操作语义的支持。他们提供的接口很相似,参数一般都为“文件名+打开标志位+权限标志位”,Apache中提供了apr_file_open函数来支持文件打开操作,该函数只是在原有的标准库的基础上进行了少许的封装。apr_file_open无法忽略习惯的转载 2013-09-23 12:17:00 · 874 阅读 · 0 评论