C/C++双链表正排序
#include
#include
#include
struct list{
int data;
struct list *next;
struct list *pre;
};
typedef struct list node;
typedef node *link;
link front=NULL,rear,ptr,head=NULL;
link push(int item){
link newnode=malloc(sizeof(node));
newnode->data=item;
if(head==NULL)
{
head=newnode;
...
解析动态联编(上篇)
文章摘要
多态性是C++最主要的特征,多态性的实现得益于C++中的动 态联编技术。文章通过对动态联编的关键技术虚拟函数表进行深入的剖析,解析 的动态联编的过程极其技术要领。
关键字
多态性 动态联编 VTABLE 虚函数
文章正文
一 从多态性谈动态联编的必要性
在进入主题之前先介绍一下联编的概念。联编就是将模块或者函数合 ...
解析动态联编(下篇)
三 虚函数表VTABLE
动态联编过程跟我们猜测的大致相同。编译器在执 行过程中遇到virtual关键字的时候,将自动安装动态联编需要的机制,首先为这 些包含virtual函数的类(注意不是类的实例)--即使是祖先类包含虚函数而本身 没有--建立一张虚拟函数表VTABLE。在这些虚拟函数表中,编译器将依次按照函 数声明次序放置类的特定 ...
详细解说STL排序(Sort)
0 前言: STL,为什么你必须掌握
对于程序员来说,数据结构是必修的一门课。从查找到排序,从链表到二叉树,几乎所有的算法和原理都需要理解,理解不了也要死记硬背下来。幸运的是这些理论都已经比较成熟,算法也基本固定下来,不需要你再去花费心思去考虑其算法原理,也不用再去验证其准确性。不过,等你开始应用计算机语言 ...
Boost中应用的泛型编程技术
1、何谓泛型编程
泛型编程(Generic Programming)关注于产生通用的软 件组件,让这些组件在不同的应用场合都能很容易地重用。在C++中,类模板和函 数模板是进行泛型编程极为有效的机制。有了这两大利器,我们在实现泛型化的 同时,并不需要付出效率的代价。
作为泛型编程的一个简单例子,让我们 看一下在C库中如何让memcpy ...
C++编程杂谈之三:面向对象(续)
上一篇我们涉及了面向对象的一个基本概念--封装,封装是一个相对比较简单的概念,也很容易接受,但是很多的场合下面,仅仅是封装并不能很好的解决很多问题,考虑下面的例子:
假设我们需要设计一个对战游戏的战斗细节,在最初的版本中我们将支持一种动作--fight。假设我们有三种角色:fighter、knight和warrior,每种角色的 ...
在不装AD的情况下管理SPS的访问群体
第一步、新建本地用户
在管理->本地用户和组->用户里面添加新用户,譬如叫做newuser,注意要把描述给写好,省得以后忘记这用户属于哪个部门;
第二步、把本地用户添加到SPS用户列表里面去
在SPS的网站设置->用户管理里面把这新建的newuser添加进去,选择用户的时候直接打newuser就可以了,注意如果希望把用户添加到访问群体 ...
C++编程杂谈之二:面向对象
软件开发是一个极其复杂的过程,一段小的代码我们可以快速、准确的完成,但是当你面对的是一个庞大的软件系统的时候,你是否有不知所措的感觉呢?
在我们使用C的年代里面,编程思想是结构化的,你的C语言老师可能会不断的教导你怎样使用结构化的方法来完成一段程序,同时,你可能也知道在软件开发中的一个重要定律(Wirth定 ...
不要把auto_ptr放入容器
本来没有打算自己翻译Effective STL的,怕影响大家情绪,只是发现有些条款在网络上找不到,只好自己翻译了。--Winter
坦白的讲,这个条款不应加入本书,因为包含atuo_ptr的容器(COAPs)本来在STL中就是禁止的。就算你这么用了,编译器也不会编译你的代码。而标准委员会也没有解释为什么不能这样。对于COAPs我应该什么都不用说 ...
C++0x概览:多线程(3)
在初始化时保护数据
如果你的数据需要在初始化时被保护,就不能再使用mutex了。因为在初始化结束后,这会引起不必要的同步。C++0x提供了很多方法来在初始化时保护数据。
1)假定你的构造函数是用constexpr关键字声明并且满足常量初始化的条件。在这种情况下,一个静态存储区的对象在静态初始阶段会确保在其他代码运行之前被 ...
CB生成的程序需要哪些文件
以下以C++Builder5.0为例,其它版本大同小异,其中C++builder1.0的缺省设置就是可独立运行的.
1. 在bcb的IDE环境中,按Project菜单并转到Linker页下,在linking项中有一个Use dynamic RTL选项,不要选中它.这关系到编译生成的EXE是否需要以下二个文件: borlndmm.dll和 cc3250mt.dll.如果选中Use dynamic RTL,程序运行将在程序EXE ...
为什么operator=操作符返回引用
问题:
MSDN文档中解释到:operator=操作符缺省情况下返回引用——
TYPE& TYPE:perator=(const TYPE&)
为什么呢?我对此的理解是:“=”是个二进制操作符。其传入的参数是引用对象,而其它的参数是类实例,“=”在这个类实例中被重载。而我在实际应用中可以不用返回任何类型(void)来实现赋值操作符,并仍然可以完成赋值操 ...
使用::std::vector<>作为管理动态数组的优先选择
摘要: 本文介绍了C++标准库中的容器类vector,分析了它的优点,并且建议在应用程序中使用它作为动态数组的优先选择,而不是MFC的CArray等其他类模板。最后介绍了vector的接口和使用时的注意事项。
在一些使用 MFC 的程序中,经常看到许多程序使用 CArray,由于 CArray的设计问题,造成使用它的代码的复杂化,增加了维护难度 ...
创建和访问环境变量
环境变量的构成
环境变量由一对字符串组成,格式为:变量=关联值。例如:
PATH=C:\WINDOWS
在DOS和WINDOWS中,你可以从命令行或在批处理文件中定义环境变量,方法是使用SET命令,后面跟赋值表达式。下面是一个创建环境变量的例子,
SET VERSION=1.1.3
在Unix中可以省略前面的SET,写为:
VERSION=1.1.3
读取环境变量
程序只 ...
在 C++ Builder中利用串行通信控件编程
摘要:串口是常用的计算机与外部串行设备之间的数据传输通道,由于串行通信方便易行,所以应用广泛。本文介绍了在C++ Builder中如何利用串行通信控件进行串行通信编程。
一、引言
目前,在用计算机进行数据传输时,常用的是串行通信方式。用C++ Builder来编写串行通信程序时,可以调用Windows API函数,也可以利用VB中的M ...
C++多态技术
摘要
本文描述了C++中的各种多态性。重点阐述了面向对象的动态多态和基于模板的静态多态,并初步探讨了两种技术的结合使用。
关键词
多态 继承 虚函数 模板 宏 函数重载 泛型编程 泛型模式
导言
多态(polymorphism)一词最初来源于希腊语polumorphos,含义是具有多种形式或形态的情形。在程序设计领域,一个广泛认可 ...
快速排序算法的C++实现
快速排序基本特性
时间复杂度:O(n*lgn)
最坏:O(n^2)
空间复杂度:最好情况下:O(lgn),最坏情况:O(n),平均情况:O(lgn)
不稳定。
关于快速排序的空间复杂度,谢谢@命运他爹 同学指正。详述一下。
快速排序由于每次递归的时候会占用一个空间返回中间数位置,所以一次递归的空间复杂度为O(1)。
最好情况和最坏情况 ...
Windows编程:遍历所有进程(exe) 代码(C++)
遍历所有进程, 即任务管理器中所有的进程目录, 包含名称和进程ID.
返回字典: Key: 进程名字, Value: 进程ID.
代码:
/*
* main.cpp
*
* Created on: 2014.06.08
* Author: Spike
*/
/*vs 2012*/
#include
#include
#include
#include
#include
using namespace ...
Windows编程:启动可执行(exe)程序 代码(C++)
通过输入程序位置启动可执行(exe)程序, 使用windows的CreateProcess()函数, 即可.
示例是调用预先生产的可执行(exe)程序.
代码:
/*
* main.cpp
*
* Created on: 2014.06.08
* Author: Spike
*/
/*vs 2012*/
#include
#include
using namespace std;
bool startProcess ...
C++计算一个数的所有组合数
计算一个数的组合数, 使用递归进行求解.
如果计算3位的组合数, 首先任选固定一位, 然后计算其余两位的组合数, 最后组合至一起. 如 1 + [23, 32] = 123, 132;
在固定其余位数, 如 2 + [13, 31] = 213, 231; 3 + [12, 21] = 312, 321;
程序分为两步分, 一个删除任意位置的一个元素, 一个是递归求解组合数.
更多精彩内容:htt ...