C/C++
文章平均质量分 53
penzo
这个作者很懒,什么都没留下…
展开
-
STL迭代器简介
标准模板库(The Standard Template Library, STL)定义了五种迭代器。下面的图表画出了这几种: input output / / forward | bidirectional | random access要注意,上面这图表转载 2010-11-08 14:30:00 · 914 阅读 · 0 评论 -
Python中调用C++函数
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/ ,需要安装python-dev。test.cpp文件如下 #include //包含python的头文件 #include #include usin原创 2011-11-27 01:04:38 · 894 阅读 · 0 评论 -
C++中内存分配、函数调用和返回值
一个由C/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap) — 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系转载 2010-11-17 22:05:00 · 954 阅读 · 0 评论 -
C++虚函数表解析(2)
多重继承(无虚函数覆盖)<br />下面,再让我们来看看多重继承中的情况,假设有下面这样一个类的继承关系。注意:子类并没有覆盖父类的函数。<br /> <br />对于子类实例中的虚函数表,是下面这个样子:<br /> <br />我们可以看到:<br />1)每个父类都有自己的虚表。(这样做就是为了解决不同的父类类型的指针指向同一个子类实例,而能够调用到实际的函数)<br />2)子类的成员函数被放到了第一个父类的表中。(所谓的第一个父类是按照声明顺序来判断的)多重继承(有虚函数覆盖)<br />下面我们转载 2010-11-12 10:19:00 · 816 阅读 · 0 评论 -
一道腾讯笔试题
<br />要求实现: <br />n*m=0时,f(m,n)=n+m+1 <br />n*m!=0时,f(m,n)=f(m-1,f(m,n-1)) <br />============================<br />#include <stdio.h>int main(){int m = 2;int n = 2;int top = 0;int stack[100];int f;do{ if ((m*n)!=0) { stack[t原创 2010-11-10 21:04:00 · 609 阅读 · 0 评论 -
段错误(segment fault)的几种原因
<br /><br />(1) 没有权限,如往const修饰的内存中写数据;<br />(2) 读一个已经释放了的内存地址;<br />(3) 往一个指向0的内存写数据;<br />(4) 访问的局部变量没有初始化。<br /> <br />原创 2010-11-10 20:46:00 · 2030 阅读 · 0 评论 -
判断主机字节序的两种方法
<br />void Endian(int i){ unsigned short a = 0x1122; unsigned char* p = (unsigned char*)&a; if (*p == 0x11) printf("LittleEndian/n"); else if (*p == 0x22) printf("BigEndian/n"); else printf("NONE/n"); return;}void Endian(char*原创 2010-11-10 20:45:00 · 1741 阅读 · 1 评论 -
C++虚函数表解析(1)
C++中的虚函数的作用主要是实现了多态的机制。关于多态,简而言之就是用父类型别的指针指向其子类的实例,然后通过父类的指针调用实际子类的成员函数。这种技术可以让父类的指针有“多种形态”,这是一种泛型技术。所谓泛型技术,说白了就是试图使用不变的代码来实现可变的算法。比如:模板技术,RTTI技术,虚函数技术,要么是试图做到在编译时决议,要么试图做到运行时决议。关于虚函数的使用方法,我在这里不做过多的阐述。大家可以看看相关的C++的书籍。在这篇文章中,我只想从虚函数的实现机制上面为大家一个清晰的剖析。当然,相同的文转载 2010-11-12 09:54:00 · 452 阅读 · 0 评论 -
CreateProcess()输出到文件
<br />利用CreateProcess()创建子进程,并输出到文件,主要步骤如下:<br />//首先用CreateFile创建文件,得到文件句柄。HANDLE hFile = CreateFile(m_sAllPath.c_str(),GENERIC_READ|GENERIC_WRITE,FILE_SHARE_READ,&sa,CREATE_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL);if (hFile == INVALID_HANDLE_VALUE) {原创 2010-11-10 22:06:00 · 1995 阅读 · 0 评论 -
cin.ignore()
<br />一段C++程序:<br />#include <iostream>#include <string>using namespace std;int main( ) { string s; cin >> s; string s2; //cin.ignore(); getline(cin, s2); cout << "s2:" << s2 << endl; return 0;}<br />如果不加cin.ig原创 2010-11-10 21:57:00 · 1522 阅读 · 1 评论 -
C++语言性能瓶颈
<br />在C++程序中,创建/销毁对象是影响性能的一个非常突出的操作。首先,如果是从全局堆中生成对象,则需要首先进行动态内存分配操作。众所周知,动态分配/回收在C/C++程序中一直都是非常耗时的。因为牵涉到寻找匹配大小的内存块,找到后可能还需要截断处理,然后还需要修改维护全局堆内存使用情况信息的链表等。因为意识到频繁的内存操作会严重影响性能,所以已经发展出很多技术用来缓解和降低这种影响,例如内存池技术。<br />尽量少使用值传递,而使用常量引用传递。<br />虚函数带来的开销:<br /> ① 空转载 2010-11-10 21:17:00 · 1229 阅读 · 0 评论 -
C和C++分别读取文本文件的方式
<br />在我们的工作学习中,经常涉及到读取文本文件的操作,其实这些简单的常用操作我们应当熟记于心。<br />本文分别列举了C和C++下按照每行的格式读取文本文件,其中C++的实现中将单词以空格为分隔符输出,可以看到C++对字符串的处理确实要强大一些。<br />c实现:<br />#include <stdio.h>#include <string.h>#include <unistd.h>#define MAX_LINE 500int main(int argc, char**原创 2010-11-10 22:03:00 · 2417 阅读 · 0 评论 -
const总结
1、修饰变量const int i = 10;//i,j都用作常变量int const j = 20;i = 15;//错误,常变量不能改变j = 25;//错误,常变量不能改变const int k;//错误,必须初始化=======================2、修饰指针指向的内容const char* val = "hello";//const修饰的是char*const char *val2 = "world";//与上一行等价char const *va原创 2010-11-10 20:56:00 · 759 阅读 · 0 评论 -
C++中Overload、Overwrite及Override的区别
Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;(4)virtual 关键字可有可无。Override(覆盖):是指派生类函数覆盖基类函数,特征是:(1)不同的范围(分别位于派生类与基类);(2)函数名字相同;(3)参数相同;(4)基类函数必须有virtual 关键字。Overwrite(重写):是指派生类的函数屏蔽了与其同名的基类函数,规则如原创 2010-11-10 20:50:00 · 22707 阅读 · 3 评论 -
四种类型转换
<br />Q:什么是C风格转换?什么是static_cast, dynamic_cast 以及 reinterpret_cast?区别是什么?为什么要注意?<br />A:转换的含义是通过改变一个变量的类型为别的类型从而改变该变量的表示方式。为了类型转换一个简单对象为另一个对象你会使用传统的类型转换操作符。比如,为了转换一个类型为doubole的浮点数的指针到整型:<br />代码:<br />int i;<br />double d;<br />i = (int) d;<br />或者:<br />i转载 2010-11-10 22:10:00 · 640 阅读 · 0 评论 -
《C专家编程》读书笔记
<br />/*3.6节*/<br />typedef 与宏主要有两点区别:<br />(1)可以用其他类型说明符对宏类型名进行扩展,但对typedef所定义的类型名却不能这么做。如:<br />#define peach int<br />unsigned peach i;//没问题<br />typedef int peach;<br />unsigned peach i;//错误<br />(2)在连续的几个变量的声明中,用typedef定义的类型能够保证声明中所有的变量均为同一种类型,而用#defi原创 2010-11-10 21:42:00 · 822 阅读 · 0 评论 -
并发用户数和QPS
关于并发用户数和QPS,自己一直被这两个概念纠结,阅读了一下相关资料,总结如下:并发 用户数和QPS两个概念没有直接关系,但是如果要说QPS时,一定需要指明是多少并发用户数下的QPS,否则豪无意义,因为单用户数的40QPS和20并 发用户数下的40QPS是两个不同的概念。前者说明该应用可以在一秒内串行执行40个请求,而后者说明在并发20个请求的情况下,一秒内该应用能处理40 个请求,当QPS相同时转载 2014-04-03 10:14:29 · 5967 阅读 · 0 评论