- 博客(29)
- 资源 (2)
- 收藏
- 关注
原创 C++底层技术---操作系统的内存管理
操作系统的内存管理有几个原则1.进程私有2.基于页3.4GB大小操作系统分配主要有2个步骤1.预留2.提交进程的虚拟地址空间的页有三种状态:自由,预留,和提交预留的作用是针对频繁请求内存代码的,导致申请的地址空间不连续而增加的。一般的过程是自由---》预留------》提交预留只是从地址空间划分一部分给程序,而得到真正的物理存储空间是在提交阶段
2016-04-30 23:10:40 300
原创 备忘录模式
备忘录模式:主要作用是针对需要记录和保存历史的类1.一个需要保存记录的类,2.一个保存记录的容器。容器类保存需要记录类的属性3.一个容器的管理者。容器的管理者中有容器类。这个需要保存记录的类里面有保存和回复类,调用容器的管理者。组合模式:组合模式主要用于大小不同但是功能一样,但是不可以聚合的类中,例如美国和英国的政府部门职责有基本一样,但是美国和英国又是2个不同的国家,
2016-04-30 22:33:23 324
原创 求一组数的全部子集算法
求出全部的子集,有很多用处,例如下面这个题,在时间复杂度要求不高的情况下,可以用全排列来求。怎样将数字的全排列算法,用到具体的题目中去:Given a string s and a dictionary of words dict, add spaces in s to construct a sentence where each word is a valid dictionary w
2016-04-29 10:36:27 715 1
转载 C++ 拷贝构造函数 赋值构造函数
拷贝构造函数和赋值构造函数的异同由于并非所有的对象都会使用拷贝构造函数和赋值函数,程序员可能对这两个函数有些轻视。请先记住以下的警告,在阅读正文时就会多心:如果不主动编写拷贝构造函数和赋值函数,编译器将以“位拷贝”的方式自动生成缺省的函数。倘若类中含有指针变量,那么这两个缺省的函数就隐含了错误。以类String 的两个对象a,b 为例,假设a.m_data 的内容为“hello”,b.m_da
2016-04-26 18:03:19 281
转载 C++性能的优化
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。一、尽量减少值传递,多用引用来传递参数。至于其中的
2016-04-15 21:04:41 878
转载 工厂模式
软件领域中的设计模式为开发人员提供了一种使用专家设计经验的有效途径。设计模式中运用了面向对象编程语言的重要特性:封装、继承、多态,真正领悟设计模式的精髓是可能一个漫长的过程,需要大量实践经验的积累。最近看设计模式的书,对于每个模式,用C++写了个小例子,加深一下理解。主要参考《大话设计模式》和《设计模式:可复用面向对象软件的基础》两本书。本文介绍工厂模式的实现。 工厂模式属于创建型模
2016-04-15 19:45:14 177
原创 STL源码----容器与算法
(A)vector有三个成员变量 start,finish,end_of_storage。1.对于vvector里面最重要的函数push_back会调用insert_aux()主要会做2件事a.判断空间是否足够(end_of_storage);如果不够1.会开辟2倍的内存空间,然后将以前的数据copy到新的内存空间2.会destory掉原来的内存空间在开辟与destroy的
2016-04-13 22:00:52 263
原创 STL源码-内存的分配
1.对于STL,编译器帮我做了很多东西,例如配置内存与释放内存a.首先在STL源码里面,利用allocate函数来分配内存,T *tmp=(T*)(new (sizeof(T)*size)t));new(P)T1(value)意思是在p所指的内存里面构造T1这个对象。b.对于destory函数而言,编译器也帮助我们释放了对象;ptr->~T();对于new与destory而言其
2016-04-13 21:33:46 205
原创 C# 读取数据表没有主键的问题
在做项目时,有事读数据库进行增删修改删除,发现表内的数据库并没有主键,那么一般有2种方法:1.联合主键,一般把表中几项联合起来作为主键,不过缺点是,联合起来的几项也有可能作为写代码的主键,所以一般不常用2.用生成流水号的方法,在表中在添加一项,这样可以构建出主键。
2016-04-13 11:35:53 1298
原创 C#泛型在项目中的运用
对于C#泛型着东西,其实用处还是很大的,主要是架构设计的好不好,架构设计的好,那么就可以发挥泛型的作用。例如我要在CS端做一个信息接收管理软件那么可以这样设计:1.设计一个主框架界面,框架左边是实现功能项。2.框架右边,是每个功能项对应的界面。3.每个功能独立的读写数据库,且每一个界面实现对一个数据库的读写,以完成需求。如果设计满足以上三项,可以这样使用泛型:
2016-04-11 11:39:55 1604 1
原创 多重部分和(2)
题目: 有n种不同大小的数字a, 每种各m个. 判断是否可以从这些数字之中选出若干使它们的和恰好为K #include using namespace std;int A[3]= {3,5,8};int B[3]= {3,2,2};int n=3;int K=17;bool d
2016-04-10 22:27:51 248
原创 多重部分和问题 递归搜索解法
//对于部分和的问题,我们通常会用DP来做,其实对于这类问题,在我们一时之间想不到好的解决方法的时候,我们可以先用深度搜索来做#include using namespace std;int A[3]={3,5,8};int B[3]={3,2,2};int n=3;int K=17;static int i1=0;bool dfs(int i,int j){
2016-04-10 21:24:17 378
原创 Excel的列编号 例如:A对应1,Z对应26,AA对应27,AZ对应52 ......
//今天华为笔试的一道上机题 Excel的列编号 例如:A对应1,Z对应26,AA对应27,AZ对应52 ......随机输入一个字符串求他对于数字,当时想了一个比较复杂的算法,虽然也OJ了,但是总是觉得开辟内存太多,后来发现其实挺简单的。总结:每道题一定要在思路清晰之后在动手敲代码,可以借助纸笔等工具来清晰你的思路,否则花很多时间。而且算法的复杂度也不高。#include #inclu
2016-04-09 18:11:16 16744 2
原创 C# 断点不赋值问题
在用是vs2010时候,当对静态变量赋值的时候,会发现设置断点处的静态变量赋值无效,这不是程序出了问题,而是编译器内部的原因。解决方法:将断点设置在静态变量的后面即可。
2016-04-08 22:59:13 433
原创 完全背包问题
#include #include using namespace std;const int maxn=100;int d[maxn][maxn];int n=3;int w[3]={3,4,2};int v[3]={4,5,3};int max(int i,int j){ return i>j?i:j;}int dfs(int i,int j){ in
2016-04-08 21:36:43 223
原创 最长公共子序列,记忆化搜索
#include <iostream>#include <string>using namespace std;const int maxn=100;int max(int i,int j){ return i>j?i:j;}string s1,s2;int d[maxn][maxn];//记忆化搜索void dfs(int i,int j){ if(i>=s1.s
2016-04-08 20:54:16 489 2
原创 怎样改动groupbox空间里面的颜色
有时,问了项目的需求,与界面的好看,我们往往会使窗体用不同的页面颜色,供用户体验,当用户选中不同的颜色,那么窗体里面空间的字体颜色也得跟着变,那么我们应该如何:怎样改动groupbox空间里面的颜色: 下面提供代码: public static void ChangePanel(System.Windows.Forms.Control PanelData) {
2016-04-07 21:33:41 693
原创 读取XML来更改ipconfig的配置
``` XmlDocument doc=new XmlDocument(); //获得配置文件的全路径 /*下面的代码是读取bin目录下debug里面的配置文件,他与读取当前项目目录下ipconfig里面的配置文件的区别,可以查找相关文献,下面只提供代码*/ string strFileName = AppDomain.CurrentDomain.Base
2016-04-07 21:27:43 513
转载 C++临时对象
C++中有这样一种对象:它在代码中看不到,但是确实存在。它就是临时对象---由编译器定义的一个没有命名的非堆对象(non-heap object)。为什么研究临时对象?主要是为了提高程序的性能以及效率,因为临时对象的构造与析构对系统性能而言绝不是微小的影响,所以我们应该去了解它们,知道它们如何造成,从而尽可能去避免它们。临时对象通常产生于以下4种情况:类型装换按值传
2016-04-06 16:28:00 267
原创 堆排序
//堆排序的最坏,平均,最好时间复杂度为O(nlogn),是不稳定的排序,空间复杂度是O(1).#include <iostream>using namespace std;int A[9]={0,1,7,8,3,5,6,7,4};int n=8;void sift(int low,int high){ int i=low,j=2*i; int t=A[i]; wh
2016-04-06 16:05:07 192
原创 各种排序算法
#include <iostream>using namespace std;int A[8]={1,7,8,3,5,6,7,4};int n=8;void insertsort() //插入排序{ for(int i=1;i<n;i++) { int t=A[i]; int j=i-1; while(j>=0&&A
2016-04-06 15:30:41 201
原创 字符串的全排列
#include<iostream>#include<vector>#include<cstring>using namespace std;string s;int a[100];void dfs_print(int n){ if(n==s.size()) { for(int i=0; i<n; i++) cout<<s[a[i]
2016-04-05 17:14:47 263
原创 C++多态的本质
1.编译器能否识别多态,看是否有virtual关键字,如果有,那么在声明对象的时候,内存会分配一个vptr关键字和一个vptb表,其中vptr指向vptb表。现在我们谈谈单继承的情况:假定某一个虚函数f(),放在vptb的slot(2)中,一个虚函数g()凡在slot(3)中,当基类声明了一个虚函数,并且有子类继承基类的时候会出现二种情况:1.基类的虚函数f()被子类重写,此时,子
2016-04-05 12:54:13 969
原创 深度探索C++对象模型(3)
对于数据成员的存取,编译器在继承的情况下的一些说明: 1.多继承: 例如class A{int a;};class B:{int b}class C:public A,public B{}B *p;C c;p=&a;编译器会在内部需要一些转化: p=(B*)((char *)&c)+sizeof(A);2,菱形继承:class A{int a;};class B
2016-04-03 14:48:57 452
原创 深度探索C++对象模型(2)
在C++中,类的成员变量有静态变量与非静态变量之分,例如class A{public:static int x;int y;};1.对于x的存取,pt->x 与 A::x其实形式是一样的,只是文法上的不同。2.对于y的存取,A a; a.y在编译器内部其实是&a+y在对象a内的偏移地址。
2016-04-02 21:28:42 220
原创 深度探索C++对象模型(1)
编译器会自动给我带来许多优化:例如:#includeusing namespace std;class A{public:static int x;};class B:virtual public A{};class C:virtual public A{};class D:public B,public C{
2016-04-02 21:04:22 425
翻译 从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*/class Solution {pub
2016-04-02 17:21:25 4156
原创 请实现一个函数,将一个字符串中的空格替换成“ ”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We Are Happy。
请实现一个函数,将一个字符串中的空格替换成“%20”。例如,当字符串为We Are Happy.则经过替换之后的字符串为We%20Are%20Happy。class Solution {public:void replaceSpace(char *str,int length) { if(length
2016-04-02 16:26:51 306
原创 二叉树的深度
/*struct TreeNode {int val;struct TreeNode *left;struct TreeNode *right;TreeNode(int x) :val(x), left(NULL), right(NULL) {}};*/class Solution {public: int TreeDepth(TreeNode*
2016-04-02 15:36:24 267
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人