![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C/C++语法的学习
文章平均质量分 53
码农SW
这个作者很懒,什么都没留下…
展开
-
Add Sibling to Binary Tree
Question:Given a binary treestruct Node {Node* leftChild;Node* rightChild;Node* nextRight;}Populate the nextRight pointers in each node.The first idea come out should be the BFS tr转载 2014-09-16 17:59:37 · 1268 阅读 · 1 评论 -
一个没有引发异常中断的access violation
access violation:由于对于没有分配的内存进行访问,而导致程序异常中断。 代码段如下:int* lpbuffer = new int[1000];int* a = new (lpbuffer) int[0];a[10] = 10;对于以上的代码段,程序就不会引发异常中断。为什么没有异常中断: 因为在运行上面的代码时,系统认为已经有1000* 4原创 2011-11-25 10:47:24 · 892 阅读 · 0 评论 -
Linux下开发必备工具集-Vim,gdb, valgrind, gprof
1. 用VIM和ctags/cscope。在linux下提供一个完整的IDE, Vim的快速上手--直接跑一下vimtutor,按照里面的训练要求对vim命令的熟悉。ctags/cscope目的是帮助程序员对程序的浏览。http://easwy.com/blog/archives/vim-cscope-ctags/ 2. GDB工具。这个是GNU提供的一个代码Debug工具原创 2011-11-03 16:42:19 · 1416 阅读 · 0 评论 -
partial_sort()和nth_element() 两个和排序有关的函数的性能问题
Partial_sort() 的作用是只对前面部分元素进行排序,而不进行全排序。nth_elment()的作用是把第n个元素放在这个序列的第n位置上,同时保证1-n-1个元素比n小,n+1-end的元素比n要大,有一个划分的作用。 按照两个函数的设计目的,Partial_sort()要比nth_element()慢。但是在VS和G++上做了性能测试,测试的结果都是后者要比前者慢,而原创 2011-11-24 12:11:11 · 2383 阅读 · 0 评论 -
gdb-Linux下的代码debug工具-初学者
http://www.huihoo.org/gnu/linux/gdb.htmlhttp://www.cs.cmu.edu/~gilpin/tutorial/转载 2011-11-03 16:24:01 · 636 阅读 · 0 评论 -
gprof-Linux下程序的性能优化工具
我们在写程序,特别是嵌入式程序的时候,通常需要对程序的性能进行分析,以便程序能够更快更好地运行,达到实时(real-time)的目的。如果程序很大,分析起来就很困难。如果有个工具能够自动进行程序的性能分析,那就最好了。这里介绍一种Linux下程序的Profiling工具---GNU gprof。GNU gprof能够打印出程序运行中各个函数消耗的时间,可以帮助程序员找出众多函数中耗转载 2011-11-03 15:32:08 · 1801 阅读 · 0 评论 -
利用多核多线程进行程序优化-转载
http://www.ibm.com/developerworks/cn/linux/l-cn-optimization/index.html#icomments 里面讲了些多核多线程程序优化的方法:1. 把原来的单线程改写成多线程。2. 针对Cache的优化这节很给力,原来还可以这样子耍cache,通过在apple数据结构a和b的成员变量之间加上一个比较大的变量,迫使Cache转载 2011-11-20 16:37:30 · 1219 阅读 · 0 评论 -
项目记录-因为类增加了一个成员变量而导致的access violation
场景:两个Project A和B, 在B中的某个类BB中增加了几个成员变量,BB类的头文件被Project A中的某段代码引用。A中的引用代码是。vector lvBB;lvBB.resize(2).在对BB类做了修改之后,只是单纯的对project B做了编原创 2011-10-17 17:08:26 · 850 阅读 · 0 评论 -
内联汇编(inline assembler) 的相关资料
内联汇编是指在源代码中直接加入汇编代码,这样在对源代码进行编译之后的汇编代码中就包含有植入的汇编代码,以达到代码优化的目的。有时候程序员自己认为自己编写的汇编代码的性能肯定比编译器生成的汇编代码性能更好,有些自负,但是如果开启编译器的优化选项,其生成的优化后的汇编代码,在原创 2011-10-16 10:43:12 · 790 阅读 · 0 评论 -
vector::resize() 使用array index 和vector::reserve()使用push_back()的性能差别
对于vector使用来说,为了防止reallocate内存,而导致的数据拷贝产生的额外耗时。可以通过以下两种组合来防止reallocate.1. vector::resize() 使用array index2. vector::reserve()使用 push_bac原创 2011-09-30 13:43:02 · 1624 阅读 · 0 评论 -
C++中头文件中是包含include还是包含类的前置声明
在一些大的工程中,可能会包含几十个基础类,免不了之间会互相引用 ( 不满足继承关系,而是组合关系 ) 。也就是需要互相声明。好了,这时候会带来一些混乱。如果处理得不好,会搞得一团糟,根据我的经验,简单谈谈自已的处理办法:编码时,我们一般会尽量避免 include 头文件,而是转载 2011-08-06 15:24:17 · 5252 阅读 · 1 评论 -
在GCC和Visual Studio中使用hash_map
熟悉STL或熟悉ACM/ICPC的话,其中的set, map, multiset, multimap一定用过无数次了,它们都是用平衡二叉树(红黑树)实现的,复杂度为O(lgn)。我们也知道set, map可以通过哈希来实现,复杂度只有O(1),可惜直到现在,unsorted_se转载 2011-08-05 21:57:44 · 1086 阅读 · 0 评论 -
怎么防止类被继承?对于不能被继承的类,怎么初始化及销毁它的实例?
“怎么防止类被继承?对于不能被继承的类,怎么初始化及销毁它的实例?”这是ADOBE公司的一道笔试题。看了这道题目,笔者查阅了一些资料并结合自己的一些想法,写了这篇博客,有错误的地方请指出,谢谢。首先看怎么防止类被继承。这里面介绍一种借用虚继承和友元机制实现的方法。其实说到转载 2011-08-06 09:04:51 · 664 阅读 · 0 评论 -
STL中容器的几个容易混淆的成员函数-size, capacity, resize, reserve
1. container::size()用于表示容器中有几个元素,用n来表示, 并不能表示容器现有的内存最多能存多少个元素。 2. container::capacity()用于表示容器现有的内存最多能够存放多少个元素, 用m来表示。 如果想要计算容器现有的内存还原创 2011-07-31 12:29:43 · 1011 阅读 · 0 评论 -
为什么不要在STL容器中存储 auto_ptr 对象
Posted on 2009-04-27 20:37 月光林地 大多数C++ 程序员都知道不要把auto_ptr 对象作为STL容器元素来使用。但是很少有人知道到底是为什么。C++标准如是说:“STL元素必须具备拷贝构造和可赋值……”,其意思是说对象可以进行安全的赋值操作,可以将转载 2011-07-17 11:50:51 · 1912 阅读 · 0 评论 -
牛人写得一些算法和数据结构
http://www.keithschwarz.com/interesting/原创 2011-12-03 20:30:20 · 777 阅读 · 0 评论 -
Linux与Windows中map类erase方法实现的不同决定使用的不同
1 #include iostream> 2 #include map> 3 #include string> 4 5 using namespace std; 6 7 int main(int argc, char* argv[]) 8 { 9 mapstring, int> MyMap;10 11 MyMap["bujiwu"] =转载 2012-02-06 10:47:04 · 1228 阅读 · 0 评论 -
(int&)a和(int)a的区别
view plaincopy to clipboardprint?#include #include #include using namespace std; int main() { float a = 1.0f; cout int)a cout int&)a cout int)a == (int&)a ) // 输出什么?转载 2010-10-02 20:25:00 · 639 阅读 · 0 评论 -
Load Balancing Web Applications
This article offers an overview of several approaches to load balancing on Web application server clusters. A cluster is a group of servers running a Web application simultaneously, appearing to the w转载 2014-08-28 22:14:15 · 1142 阅读 · 0 评论 -
C++结构类型在GDB中的强制类型转换(带namespace的强制转型要加单引号的)
今天在调试程序的过程中遇到的一个小问题,在这里记录一下,希望能对遇到同样问题的朋友有所帮助。以下面的程序为例程进行说明:12345678910111213141516171819202122232425262728293031323334353637383940414243444转载 2014-08-27 14:27:15 · 4085 阅读 · 0 评论 -
LRU cache的一个简单实现
用一个结构表示Key 和 Value:class LRUCacheNode{friend LRUCache;int mKey, mVal;LRUCacheNode* next;LRUCacheNode* pre;LRUCacheNode(int iK, int iV):mKey(iK), mVal(iV), next(NULL), pre(NULL){};};原创 2014-06-16 15:58:22 · 1127 阅读 · 0 评论 -
gdb调试-查看STL容器
在GDB进行调试的时候,查看STL容器是个比较痛苦的事情,比如查看vector, map 这些容器,根本看不到里面的数据是什么。现在介绍一个gdb 查看STL容器神器。文件:http://www.yolinux.com/TUTORIALS/src/dbinit_stl_views-1.03.txt下载上述文件,按照文件要求吧上述文件存成".gdbinit"文件放到你的根原创 2014-02-27 17:37:32 · 5885 阅读 · 2 评论 -
calloc(), malloc(), realloc(), free(),alloca()
内存区域可以分为栈、堆、静态存储区和常量存储区,局部变量,函数形参,临时变量都是在栈上获得内存的,它们获取的方式都是由编译器自动执行的。利用指针,我们可以像汇编语言一样处理内存地址,C 标准函数库提供了许多函数来实现对堆上内存管理,其中包括:malloc函数,free函数,calloc函数和realloc函数。使用这些函数需要包含头文件stdlib.h。四个函数之间的有区别转载 2014-01-27 11:05:52 · 774 阅读 · 0 评论 -
用 Python ctypes 来调用 C/C++ 编写的第三方库
看到一篇简洁的文章--如何用Python ctypes调用C++(ctypes调用C没这么多麻烦事),不敢独享...如果需要用 Python 调用 C/C++ 编写的第三方库(这些第三方库很可能就是你之前写出来的),只是需要一个脚本语言来粘合它们。这个时候,用 Python ctypes 可以很方便地实现调用。StackOverflow 上的 Calling C/C++ fro转载 2014-01-12 13:51:46 · 10537 阅读 · 0 评论 -
std::string的Copy-on-Write:不如想象中美好
Copy-on-write(以下简称COW)是一种很重要的优化手段。它的核心思想是懒惰处理多个实体的资源请求,在多个实体之间共享某些资源,直到有实体需要对资源进行修改时,才真正为该实体分配私有的资源。COW技术的一个经典应用在于Linux内核在进程fork时对进程地址空间的处理。由于fork产生的子进程需要一份和父进程内容相同但完全独立的地址空间,一种做法是将父进程的地址空间完全复制一转载 2013-11-19 14:53:33 · 1018 阅读 · 0 评论 -
python中调用C++写的动态库
一、环境:Windows XP + Python3.21. dll对应的源文件(m.cpp):[cpp] view plaincopy#include extern "C" { _declspec(dllexport) int add(int a, int b) {转载 2012-09-27 15:44:57 · 1204 阅读 · 0 评论 -
MMSeg中文分词算法
Java中有一些开源的分词项目,比如:IK、Paoding、MMSEG4J等等。这里主要说的是MMSEG4J中使用的MMSeg算法。它的原文介绍在:http://technology.chtsai.org/mmseg/,是用英文书写的,这是只是它的一个中文笔记。 为什么中文要分词中文和英文的书写方式不一样,英文中单词之间用空格隔开,而且每个单词代表一个含义(当然也有短语,但这占的比例不转载 2012-09-27 17:00:37 · 2692 阅读 · 1 评论 -
GCC/G++编译器和VS IDE中的一些预定义宏和用户自定义宏
预定义宏, 编译器通常会根据平台和编译选项的不同,为被编译的程序提供不同的预定义的宏,例如WIN32 WIN64 LINUX, 例如DEBUG, RELEASE.1. 在使用gcc/g++编译器时,可以通过以下命令打印出编译器预编译的宏。gcc -dM -E - 2. 在VS IDE中,可以参看http://msdn.microsoft.com/zh-cn/libr原创 2012-08-16 16:05:07 · 8267 阅读 · 0 评论 -
用StringStream来替换iota等类型转换
1.stringstream的> 操作符可以直接操作字符串或数值如:#ifdef _UNICODEtypedef std::wstring tstring;typedef std::wstringstream tstringstream;#elsetypedef std::string tstring;typedef std::stringstream tstr转载 2012-07-18 10:03:17 · 852 阅读 · 0 评论 -
浮点数累加的方法
运行下述代码段:double value = 99999999.99; double sum = 0.0; for(int i=0;i { sum += value; // 错误的浮点累加方法} printf("%18.2lf", sum); // 819199999918.02 --wrong运行结果,sum是错误的, 和正确值相差0.06(转载 2011-07-31 12:01:29 · 2487 阅读 · 0 评论 -
hash_map hash_set命名空间
由于hash_map和hash_set这两个容器并没有被纳入C++标准,所以,这两个容器并不能像其他容器一样包含在STD命名空间下。也就是说,using namespace std;后是不能找到这两个容器的,这两个容器在在VS IDE下, 是属于STDEXT命名空间下。用 using namspace stdext;即可。原创 2011-07-24 12:01:49 · 1833 阅读 · 0 评论 -
动态hash之linear Hash的实现和性能比较
linear hash 一,在介绍linear hash 之前,需要对动态hash和静态hash这两个概念做一下解释: 静态hash:是指在hashtable初始化得时候bucket的数目就已经确定了,当需要插入一个元素的时候,通过hash函数找到对应的bucket number,之后插入即可。不论用什么冲突解决方法,当插入的元素越来越多时,在这个hash表中查找元素的效率会变的越原创 2011-07-31 20:22:59 · 5617 阅读 · 0 评论 -
C++ 智能指针(Smart Pointer)
http://blog.csdn.net/zhongjiekangping/article/details/5787773 智能指针具有非常强大的能力,谨慎而明智的选择能带来极大的好处。我不否认智能指针的能力,虽然我在之前的否认过auto_ptr。可能由于我自身能力的限制,体会不转载 2011-07-17 11:39:25 · 845 阅读 · 0 评论 -
<Sixteen Ways to Stack a Cat>读后感
这paper以Stack a cat为例子,展示了一些基础的C++封装的技术。对于初学C++的人来说,还是C++老手都是挺有帮助的。2-3. 用传统C的方式定义一些函数。4. modules用class来封装Stack module。5. modules with Sealed原创 2011-07-24 11:49:47 · 953 阅读 · 0 评论 -
防止类被实例化的方法
1. 定义一个无用的抽象函数,使得类成为抽象类。抽象类是不能被实例化的。 2. 把类的构造函数声明为private。原创 2011-07-23 16:10:55 · 3335 阅读 · 3 评论 -
C++中extern “C”含义深层探索(zz)
本文关键词: c++ 含义1.引言C++语言的创建初衷是“a better C”,但是这并不意味着C++中类似C语言的全局变量和函数所采用的编译和连接方式与C语言完全相同。作为一种欲与C兼容的语言,C++保留了一部分过程式语言的特点(被世人称为“不彻底地面向对象”),因而它可以定义不属于任何类的全局变量和函数。但是,C++毕竟是一种面向对象的程序设计语言,为了支持函数的重载,C++对全转载 2010-04-17 16:08:00 · 440 阅读 · 0 评论 -
Const,Const函数,Const变量,函数后面的Const (zz)
关键字:Const,Const函数,Const变量,函数后面的Const 看到const 关键字,C++程序员首先想到的可能是const 常量。这可不是良好的条件反射。如果只知道用const 定义常量,那么相当于把火药仅用于制作鞭炮。const 更大的魅力是它可以修饰函数的参数、返回值,甚至函数的定义体。const 是constant 的缩写,“恒定不变”的意思。被const 修转载 2010-04-17 15:43:00 · 492 阅读 · 0 评论 -
C++/STL Bitset (转)
最近用的bitset比较多,位运算在存储状态、模拟行动、搜索很多方面有着非常巨大的优势,所以特意转了一篇bitset的基本用法。==========================================================构造函数bitset b; b有n位,每位都为0.参数n可以为一个表达式.如bitset b0;则"b0"为"00000"; bitset b(转载 2010-04-17 15:08:00 · 1166 阅读 · 0 评论 -
memset用法详解(转)
memset用法详解(转)2007-01-31 20:00memest原型 (please type "man memset" in your shell) void *memset(void *s, int c, size_t n); memset:作用是在一段内存块中填充某个给定的值,它对较大的结构体或数组进行清零操作的一种最快方法。常见的三种错转载 2010-04-11 20:28:00 · 445 阅读 · 0 评论 -
STL中提供-二分查找算法
STL包含四种不同的二分查找算法,binary_search lower_bound upper_bound equal_range.他们作用的range是已sorted。binary_search试图在已排序的[first, last)中寻找元素value。如果[first, last)内有等价于value的元素,它会返回true,否则返回false,它不返回查找位置。lower_b转载 2010-04-12 21:47:00 · 1911 阅读 · 1 评论