
c/c++
文章平均质量分 72
oyanghaizhi
喜欢挑战,追求自我!
展开
-
STL容器里存放对象还是指针
一.问题的引出 容器可以存放对象,可以存放指针,这里要谈的是两者的使用问题。就是什么时候存放对象更好,什么时候存放指针更好? 二.问题的分析过程: 1. 首先说下stl容器的工作方式对于内建类型(int float char等),容器的工作方式是纯粹的位拷贝,这里没有什么需要多说的。对于自定义的对象,容器容纳了对象(比如通过insert或push_back等)转载 2013-11-19 23:16:47 · 844 阅读 · 0 评论 -
从vc6.0转到vs2008出现的错误
将碰到的问题归纳如下:1消息映射VS2008对消息的检查更为严格,以前在VC6下完全正常运行的消息映射在VS2008下编译不通过a. ON_MESSAGE(message,OnMyMessage); OnMyMessage返回值必须为LRESULT,其形式为:afx_msg LRESULT OnMyMessage(WPARAM, LPARAM);如果不符原创 2013-12-23 22:40:40 · 831 阅读 · 0 评论 -
不定参数的应用
不定参数的应用不定参数当年做为C/C++语言一个特长被很多人推崇,但是实际上这种技术并没有应用很多。除了格式化输出之外,我实在没看到多少应用。主要原因是这种技术比较麻烦,副作用也比较多,而一般情况下重载函数也足以替换它。尽管如此,既然大家对它比较感兴趣,我就简单总结一下它的使用和需要注意的常见问题。原理刚学C语言的时候,一般人都会首先接触printf函数。通过这个函数,你可转载 2014-03-31 22:33:58 · 389 阅读 · 0 评论 -
C/C++位操作简介 位段
前言我注意到有些人对位运算感到困惑,所以我决定写这篇简单的教程来说明位运算如何操作。位简介位,它是什么?你可能会问。简单来说,位就是1和0,在电脑中做的每一件事都是由它们组成的。电脑中所有的数据使用的是位。一个字节由8个位组成;一个字由两个字节组成,即16个位;而一个双字由四个字节组成,即32个位。 0 1 0 0 0 1 1 1 1 0 0 0 0 1转载 2014-07-28 21:01:07 · 574 阅读 · 0 评论 -
柔性数组
在讲述柔性数组成员之前,首先要介绍一下不完整类型(incomplete type)。不完整类型是这样一种类型,它缺乏足够的信息例如长度去描述一个完整的对象。 6.2.5 Types incomplete types (types that describe objects but lack information needed to determine their sizes).转载 2014-07-28 21:15:30 · 322 阅读 · 0 评论 -
C/C++ 做库文件和使用库
用C++ 做动态链接库一、建立工程1、建立Win32控制台应用程序 12、选择动态链接库工程 DLL 2 3.工程建立 34.这个时候,你会发现项目中出现了一个CreatDLL.cpp的文件,该文件的第一条语句,是这样的:#include "stdafx.h"。Stdafx.h是visual studio的预编译头文件,主要是为了加快编译的速度。为了原创 2014-08-05 09:36:05 · 1054 阅读 · 0 评论 -
内存对齐(内存中的数据对齐)、大端模式及小端模式
数据对齐,是指数据所在的内存地址必须是该数据长度的整数倍。DWORD数据的内存起始地址能被4除尽,WORD数据的内存起始地址能被2除尽。X86 CPU能直接访问对齐的数据,当它试图访问一个未对齐的数据时,会在内部进行一系列的调整。这些调整对于程序员来说是透明的,但是会降低运行速度,所以编译器在编译程序时会尽量保证数据对齐。不同的编译器内存对齐的方式不同。一个小例子:在32位的机器上转载 2014-08-05 20:44:47 · 724 阅读 · 0 评论 -
COM 和 动态链接库的区别
也许你会发现,动态连接库就是提供了函数的接口,之后用隐式连接或者显示的LoadLiary就可以调用其封转的功能。而COM用的时候却要继承接口,用之前要先注册。好像COM和动态链接库两个没有什么区别。 其实不然。 dll与com的关系:com是一种规范,按照是com规范实现的dll可以被视为com组件。而且com组件的接口是一组具有特定规范的函数,所以com组件可以别视为转载 2014-11-19 22:09:05 · 855 阅读 · 0 评论 -
C/C++结构体字节对齐详解
结构体的sizeof先看一个结构体:struct S1{ char c; int i;}; sizeof(s1)在VC6中按默认设置得到的结果为8。我们先看看sizeof的定义——sizeof的结果等于对象或者类型所占的内存字节数,好吧,那就让我们来看看S1的内存分配情况S1 s1 = { 'a', 0xFFFFFFFF };定义上面的变量后,加转载 2015-09-24 22:22:53 · 369 阅读 · 0 评论 -
C++中friend的使用(friend function and friend class)
对于一个没有定义public访问权限的类,能够让其他的类操作它的私有成员往往是有用的。例如你写了一段binary tree的代码,Node是节点类,如果能够让连接多个节点的函数不需要调用public方法就能够访问到Node的私有成员的话,一定是很方便的。Friend Classes(友元类)C++中的friend关键字其实做这样的事情:在一个类中指明其他的类(或者)函数能够直接访问该类中的转载 2015-10-04 11:06:38 · 443 阅读 · 0 评论 -
UniCode 下CString 转 char*,利用WideCharToMultiByte进行转换
先总结一下网上找到的三种转换的方法:方法一:使用函数setlocale setlocale(LC_ALL,"chs"); 需要包含头文件#include 此方法的思路是配置地域化信息。通常在需要输入输出中文的时候设置一下,就没问题了,setlocale详情 点我 方法二:使用函数:T2A、W2A CString str = _转载 2013-12-23 22:27:28 · 734 阅读 · 0 评论 -
数据共享+指向自身类型的指针+智能指针
实际项目遇到如下要求:1、某几个类(A,B,C,....) 可以共享某个数据类;2、A,B,C,....这些类只使用数据类中感兴趣的数据成员;3、只要数据类的数据更新, A,B,C,...类中相应的数据也可更新; 思考: 1.继承、组合、指针都有数据分享的功能,但结合上述要求,选择指针实现;2.指针:让多个指针指向数据类,实现数据的实时共享; 存在问题:多个指原创 2013-12-04 23:24:19 · 885 阅读 · 0 评论 -
程序员面试之道之走进微软
以下内容属于原创,同时发表于Lich's blogL!ch,2014届硕士研究生,签约微软。一分耕耘,一分收获谨以此篇,记录我即将结束的学生生涯,和对马上到来的新生活的向往。现在研三,14年3月底就要毕业了,回头看看找工作走过的路,感概万千。整个找工作的过程要追溯到很久以前。自己一直很憧憬微软,之前一直觉得离自己很遥远,周围也没有人去过。上了研究转载 2013-11-13 23:21:42 · 738 阅读 · 0 评论 -
深入解释直接初始化与复制初始化的区别
不久前,在博客上发表了一篇文章——提高程序运行效率的10个简单方法,对于其中最后一点,多使用直接初始化,有很多读者向我提出了疑问,并写了一些测试程序,来说明直接初始化与复制初始化是同一件事。让我了解到大家对于直接初始化与复制初始化的区别的确是不太清楚,无可否认,那篇文章的例子用得的确不太好,在这里表示歉意!所以我觉得还是有必要跟大家详细分享一下我对直接初始化和复制初始化的理解。一、Pr转载 2013-11-21 22:39:40 · 618 阅读 · 0 评论 -
使用指针容器后请销毁指针
当把指针放入标准容器后,不要忘了在销毁容器时释放容器中指针所指向的object,否则"memory leak".例如:class CObj{...};std::vector objVector(3);objVector.push_back(new CObj);objVector.push_back(new CObj);objVector.push_back(new C原创 2013-11-21 21:52:39 · 1534 阅读 · 0 评论 -
指针容器的清理
vector<path*> p; for(int i=0;i<100;i++) p.push_back(new path); for(size_t i=0;i<100;i++) { delete p[i]; p[i] = null; } 或 vector<path>::iterator it = p.begin(); for(;it!=p.end();++it) { delete *it;原创 2013-11-21 22:29:42 · 763 阅读 · 0 评论 -
提高程序运行效率的10个简单方法--转自林锐博士
对于每一个程序员来说,程序的运行效率都是一个值得重视,并为之付出努力的问题。但是程序性能的优化也是一门复杂的学问,需要很多的知识,然而并不是每个程序员都具备这样的知识,而且论述如何优化程序提高程序运行效率的书籍也很少。但是这并不等于我们可以忽略程序的运行效率,下面就介绍一下本人积累的一些简单实用的提高程序运行效率的方法,希望对大家有所帮助。注:以C/C++程序为例一、尽量减转载 2013-11-21 22:41:43 · 756 阅读 · 0 评论 -
指向类成员函数的指针
转载于:http://blog.youkuaiyun.com/jinjinclouded/article/details/5189540最近在开发中用到了函数指针,于是想整理了一下有关函数指针的概念。O(∩_∩)O~ 首先 函数指针是指向一组同类型的函数的指针;而类成员函数我们也可以相似的认为,它是指向同类中同一组类型的成员函数的指针,当然这里的成员函数更准确的讲应该是指非静态的成员函转载 2013-11-21 22:44:32 · 529 阅读 · 0 评论 -
说一说vector<bool>
转载于:http://www.cnblogs.com/wpcockroach/p/3179572.htmlvector标准库模版类应该是绝大多数c++程序员使用频率比较高的一个类了。不过vector也许就不那么被程序员所了解。关于vector不尝试研究一番,一般还不太容易知道其中蕴含的问题。首先得明确一点,那就是vector是vector的特化版。这个特化版本要解决的问题就是存储容转载 2013-11-21 22:46:46 · 608 阅读 · 0 评论 -
C++类中的静态成员变量和静态成员函数的作用
数据成员可以分静态变量、非静态变量两种. 静态成员:静态类中的成员加入static修饰符,即是静态成员.可以直接使用类名+静态成员名访问此静态成员,因为静态成员存在于内存,非静态成员需要实例化才会分配内存,所以静态成员不能访问非静态的成员..因为静态成员存在于内存,所以非静态成员可以直接访问类中静态的成员. 非成静态员:所有没有加Static的成员都是非静态成员,当类被实例化之后,可转载 2013-11-12 23:39:35 · 535 阅读 · 0 评论 -
删除字符串前后的空格
#include #include using namespace std;string trim(string str);int main(){string name(" wei ");cout name = trim(name);cout return 1;}string trim(string str){原创 2013-11-13 23:17:23 · 752 阅读 · 0 评论 -
将字符串改为小写
#include #include using namespace std;string tolower(string str);int main(){string name("优快云");cout name = tolower(name);cout return 1;}string tolower(string s){原创 2013-11-13 23:39:03 · 729 阅读 · 0 评论 -
C++头文件相互引用
需求是:类A中使用B, 类B中使用A常见错误用法------------------------A.h---------------------#ifndef HEADER_AAA#define HEADER_AAA #include "B.h"class A{public: A(void); virtual ~A(void)原创 2015-10-04 15:37:12 · 795 阅读 · 0 评论