![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
期待一片自己的蓝天
在加利福尼亚州门洛帕克的Facebook园区入口可以看到一个标牌,正面是经典的竖起大拇指点赞的图案,然而在这个标牌的背面,掩映在树荫里的依然是园区昔日所有者2009年被甲骨文公司Oracle吞并的Sun电子计算机公司Sun Microsystems Inc.的名字。Facebook之所以在牌子上留下Sun电子计算机公司的名字就是为了警醒自己,如果企业停止创新的步伐,就会沦落至如此下场。
展开
-
使用C++标准库sort自定义比较函数导致死循环问题
永远让比较函数对相等的值返回false(来自Effective C++)---------------------------------------------------------------------------------------------------------转自http://www.cnblogs.com/yuanzz/p/3735213.html转载 2017-06-22 09:37:23 · 1167 阅读 · 0 评论 -
一些C++的开源项目和C++库以及修炼C++的方法
Google的C++开源代码项目v8 - V8 JavaScript EngineV8 是 Google 的开源 JavaScript 引擎。V8 采用 C++ 编写,可在谷歌浏览器(来自 Google 的开源浏览器)中使用。V8 根据 ECMA-262 第三版中的说明使用 ECMAScript,并在使用 IA-32 或 ARM 处理器的 Windows XP 和 Vista、原创 2015-04-03 15:58:45 · 5253 阅读 · 1 评论 -
C/C++写得一个计时器用于检查程序的处理数据性能
一般设计C/C++程序需要每秒能处理多少的数据,因此可以做一个简单的计时器来计时,代码如下:[cpp] view plaincopy#ifndef _TIMER_H_ #define _TIMER_H_ #include #include using namespace std; class Timer{原创 2015-03-18 11:44:22 · 1054 阅读 · 0 评论 -
探寻C++最快的读取文件的方案
在竞赛中,遇到大数据时,往往读文件成了程序运行速度的瓶颈,需要更快的读取方式。相信几乎所有的C++学习者都在cin机器缓慢的速度上栽过跟头,于是从此以后发誓不用cin读数据。还有人说Pascal的read语句的速度是C/C++中scanf比不上的,C++选手只能干着急。难道C++真的低Pascal一等吗?答案是不言而喻的。一个进阶的方法是把数据一下子读进来,然后再转化字符串,这种方法传说中很不错,转载 2015-03-24 11:46:56 · 721 阅读 · 0 评论 -
How to initialize a static const map in c++?
#include using namespace std;struct A{ static map create_map() { map m; m[1] = 2; m[3] = 4; m[5] = 6; return m; } s原创 2015-03-12 15:38:25 · 1632 阅读 · 0 评论 -
单例模式 和 静态成员 孰优孰劣?
观点一:(单例)单例模式比静态方法有很多优势:首先,单例可以继承类,实现接口,而静态类不能(可以集成类,但不能集成实例成员);其次,单例可以被延迟初始化,静态类一般在第一次加载是初始化;再次,单例类可以被集成,他的方法可以被覆写;最后,或许最重要的是,单例类可以被用于多态而无需强迫用户只假定唯一的实例。举个例子,你可能在开始时只写一个配置,但是以后你可能需要支持超过一个配置集,原创 2015-03-11 19:30:06 · 829 阅读 · 0 评论 -
multimap的学习
#include #include using namespace std;void test_multimap(){//构造 multimap 的测试数据 multimap example; example.insert(make_pair(string("A"), string("11"))); example.insert(make_pair(string("A"原创 2015-03-20 19:52:38 · 825 阅读 · 0 评论 -
C++写得统计线程利用率的小工具
thread_usage.h#ifndef __THREAD_USAGE__#define __THREAD_USAGE__#include #include #include #include namespace thread{class CThreadUsage{public: CThreadUsage(unsigned int printCount, st原创 2015-03-25 17:35:09 · 1056 阅读 · 0 评论 -
关于jsoncpp使用上的问题
上次写了一个安装jsoncpp的博客,那次是把头文件和库文件放在了系统默认的查找路径下了,而这些对于一个项目来说,迁移很不方便,就想到把jsoncpp的头文件和库文件都放在项目的目录中,我放在了“项目路径/api/json/include”和“项目路径/api/json/lib”中了。 在makefile中指定好查找路径后,就开始编译,结果遇到了如下问题:“/usr/include/wchar.h原创 2015-02-13 10:41:04 · 906 阅读 · 0 评论 -
使用log4cplus写日志
首先是编译,安装log4cplus。第二是对API进行封装,代码如下:log.h#ifndef _LOG_H_#define _LOG_H_#include #define DEBUG(input) DEBUG_LOG((input), (__FILE__), (__LINE__));#define ERROR(input) ERROR_LOG((input), (__FI原创 2015-02-10 19:44:05 · 3703 阅读 · 0 评论 -
linux下Jsoncpp的安装与使用
1.软件准备JsonCpphttp://sourceforge.net/projects/jsoncpp/files/sconshttp://sourceforge.net/projects/ ... /scons-2.1.0.tar.gz说明:scons需要python,在linux中自己携带了python,放心使用。2.安装目录为了统一安装目录,原创 2015-02-11 15:45:02 · 7807 阅读 · 1 评论 -
发送http请求的代码实现
#include #include #include #include #include #include #include #include #include #include #include #include #include #define SA struct sockaddr#define MAXLINE 4096#define MAXSUB原创 2015-02-26 10:29:47 · 1643 阅读 · 2 评论 -
为什么会有extern "C"这样的规定?
1.引言 C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全局函数的处原创 2015-01-07 09:58:41 · 2039 阅读 · 1 评论 -
给程序加入能打印文件名、行号、日期的日志信息,并设置debug开关
我们在写程序的时候,总是或多或少会加入一些printf之类的语句用于输出调试信息,但是printf语句有个很不方便的地方就是当我们需要发布程序的时候要一条一条的把这些语句删除,而一旦需要再次调试的时候,这些语句又不得不一条条的加上,这给我们带来了很大的不便,浪费了我们很多的时间,也造成了调试的效率低下。所以,很多人会选择使用宏定义的方式来输出调试语句。比如,定义一个宏开关:#def原创 2015-01-07 14:43:46 · 2246 阅读 · 0 评论 -
一份采用单例模式编写,可读取配置文件的代码
Confaccess.h#ifndef __CONFACCESS_H__ #define __CONFACCESS_H__ #include #include #include #include class CConfAccess{ public: static CConfAccess* getInstance() {原创 2015-04-14 15:57:44 · 832 阅读 · 0 评论 -
linux下的C\C++多进程多线程编程
1、多进程编程[cpp] view plaincopy#include #include #include int main() { pid_t child_pid; /* 创建一个子进程 */ child_pid = fork(); if(chil原创 2015-04-09 13:14:29 · 2991 阅读 · 0 评论 -
ubuntu升级gcc/g++的方法
# 安装 add-apt-repository 工具sudo apt-get install software-properties-common# 增加源sudo add-apt-repository ppa:ubuntu-toolchain-r/test# 更新源sudo apt-get update# 更新安装sudo apt-get upgrade# 安装 gcc/g++原创 2017-02-23 16:10:28 · 3328 阅读 · 0 评论 -
关于c 和 c++ 中定义全局常量的异同
之前学习c语言的时候,要用到全局的常量,必须要在.h文件中用static const 定义。例如:global.h#include static const int a = 5;static const float b = 5;extern int c;void test();test.c#include "global.h"int c = 7;void test(原创 2016-07-19 15:39:26 · 692 阅读 · 0 评论 -
c++string的erase方法
erase函数的原型如下:(1)string& erase ( size_t pos = 0, size_t n = npos );(2)iterator erase ( iterator position );(3)iterator erase ( iterator first, iterator last );也就是说有三种用法:(1)erase(pos,n); 删除从pos开始的n个字符,比原创 2016-07-13 11:01:41 · 1904 阅读 · 0 评论 -
linux指定系统搜索头文件的路径
除了默认的/usr/include, /usr/local/include等include路径外,还可以通过设置环境变量来添加系统include的路径:# C export C_INCLUDE_PATH=XXXX:$C_INCLUDE_PATH# CPP export CPLUS_INCLUDE_PATH=XXX:$CPLUS_INCLUDE原创 2016-04-09 23:44:21 · 1350 阅读 · 0 评论 -
C++生产者消费者的实现与总结
线程A负责打印数组 线程B负责向数组中push一个元素,做到每push10个元素 线程A就执行一次打印。 这个问题可以用生产者消费者模型来解决。#include <iostream>#include <mutex>#include <vector>#include <thread>#include <time.h>using namespace std;volatile int g_cou原创 2016-02-26 13:52:19 · 3351 阅读 · 0 评论 -
C++阻塞队列实现
阻塞队列是后台开发中多线程异步架构的基本数据结构,像python, java 都提供线程安全的阻塞队列,c++ 可能需要自己实现一个模板。从性能考虑,自己没有使用STL的queue作为基本数据结构,而是使用循环数组作为基本数据结构,性能应该比queue高,省去了动态内存分配和回收。确点就是,队列大小不可动态扩展,当时实际开发中,可以通过压力测试和内存的限制,配置合适的队列大小来满足应用需求。程序代码原创 2016-02-26 13:20:28 · 4773 阅读 · 0 评论 -
remove_if的使用
remove_if(iterator1, iterator2, func()); 用于对容器内的元素进行操作,源码如下:template class ForwardIterator, class UnaryPredicate> ForwardIterator remove_if (ForwardIterator first, ForwardIterator last,原创 2016-03-09 19:25:59 · 839 阅读 · 0 评论 -
windows下配置CLion IDE
1、下载mingw:https://sourceforge.net/projects/mingw/?source=typ_redirect 下载完成后,配置下载的包:2、在CLion中配置:原创 2016-02-24 11:51:57 · 8612 阅读 · 0 评论 -
反向迭代器的使用
对一个vector反向迭代器的使用例子:vector::reverse_iterator r_iter; for (r_iter = vec.rbegin(); // binds r_iter to last element r_iter != vec.rend(); // rend refers 1 before 1st element ++r_iter原创 2016-03-09 10:10:25 · 1158 阅读 · 0 评论 -
c++在头文件中定义全局变量时需要注意的地方
我们知道,在 C++(但不是在 C 语言)中,const 限定符对默认存储类型稍有影响。在默认情况下,全局变量的链接性为外部的,但 const 全局变量的链接性为内部的。也就是说,在 C++ 看来,全局 const 定义就像使用了 static 说明符一样。 因此,可以将 const 常量定义在头文件中供工程中的多个其它文件包含引用,并且编译时不会产生变量重复定义的错误。当原创 2016-03-16 14:35:26 · 7532 阅读 · 1 评论 -
单例模式的双层锁原理
为什么要在多线程中创建单例模式的时候要进行双重锁定?先回顾一下双重锁定的代码块。public class SingleTon { private static SingleTon singleTon = null; public SingleTon() { // TODO Auto-generated constructor原创 2015-10-21 10:53:21 · 8589 阅读 · 5 评论 -
vector删除元素与清除内存空洞
问题:stl中的vector容器常常造成删除假象,这对于c++程序员来说是极其讨厌的,《effective stl》大师已经将之列为第17条,使用交换技巧来修整过剩容量。内存空洞这个名词是网上的学者给出的,我觉得用来描述这个基本现象特别容易提醒自己vector删除的这个陷阱。首先给出一段代码:35 void testvector()36 {38 vector v;原创 2015-06-04 11:12:08 · 3027 阅读 · 0 评论 -
linux的父进程向子进程发kill信号例子以及对子进程的状态进行判断
先看一个父进程向子进程发kill信号例子:#include #include #include #include #include int main(int argc, const char *argv[]){ pid_t pid; int status; pid = fork(); if (0 == pid) { pri原创 2015-04-09 19:10:56 · 11118 阅读 · 0 评论 -
Nginx + FastCgi + Spawn-fcgi + C 架构的服务器环境搭建
Nginx + FastCgi + Spawn-fcgi + c 的服务器架构原创 2014-10-13 09:15:30 · 1872 阅读 · 0 评论 -
curl中curl_easy_setopt的CURLoption参数详解
CURLOPT_HEADER:设为1,则在返回的内容里包含http header;CURLOPT_FOLLOWLOCATION:设为0,则不会自动301,302跳转;*CURLOPT_INFILESIZE: 当你上传一个文件到远程站点,这个选项告诉PHP你上传文件的大小。*CURLOPT_VERBOSE: 如果你想CURL报告每一件意外的事情,设置这个选项为一个非零值。*C原创 2014-10-13 14:39:58 · 4222 阅读 · 0 评论 -
source insight的几个有用的配置和插件
以前也写过一个source insight代码对齐,由于自己理解不够深刻,只能解决部分问题,不能根治在source insight中对齐的代码在XXX编辑器中全乱了的问题。在改变字体为Courier New字体后,代码无法对齐的主要原因就是Tab与空格的问题。在很多大公司如华为已经禁止在代码中使用Tab来对齐了,这是个好习惯。有同学要说了,什么不准用tab来对齐,你想累死我呀。不用Tab来原创 2014-10-13 14:09:55 · 22258 阅读 · 0 评论 -
智能指针的模板,用来管理动态分配的内存
智能指针的模板,用来管理动态分配的内存原创 2014-07-22 21:47:04 · 907 阅读 · 0 评论 -
统计输入的单词中有几个长度大于n的,n是自己指定的,用函数对象实现
统计输入的单词中有几个长度大于n的,n是自己指定的,用函数对象实现原创 2014-07-23 14:28:17 · 794 阅读 · 0 评论 -
C++的一个简单的句柄类模板
C++的一个简单的句柄类模板原创 2014-07-23 01:21:54 · 1146 阅读 · 0 评论 -
Git上传时忽略某些文件
1、vim .gitignore文件2、将忽略类型fang'r原创 2014-07-16 21:54:34 · 776 阅读 · 0 评论 -
顺序容器的5种初始化方法
C++中容器的5种初始化方法。原创 2014-07-16 20:26:35 · 1260 阅读 · 0 评论 -
C++Primer 第10章的练习题:TextQuery类
#include#include#include#include#include#include#include#includeusing namespace std;class TextQuery{public: typedef vector::size_type line_no; void read_file(ifstream &is) {原创 2014-04-28 08:33:11 · 879 阅读 · 0 评论 -
C++Primer 中的Sales_items.h头文件
C++Primer 中的Sales_item.h头文件原创 2014-04-28 08:29:52 · 7778 阅读 · 1 评论 -
C++重载加号运算符实现两个结构体的相加
C++ 运算符重载,实现两个结构体相加原创 2014-05-06 23:54:34 · 9252 阅读 · 0 评论