c++和c
文章平均质量分 70
wangyangkobe
这个作者很懒,什么都没留下…
展开
-
C++11 并发教程——Part2:保护共享数据
在前面一篇文章,我们知道怎么使用线程并行地执行程序。在每个线程中执行的代码都是独立的。通常情况下,多个线程之间会用到共享数据。此时,我们就会面临一个问题:同步。通过下面一段简单的代码来分析同步问题。同步问题下面这个例子,我们探讨一个简单的计数器类。这个类有一个数据成员value和成员函数(增加数据成员value)。class Counter{public: voi翻译 2013-10-28 22:47:11 · 1701 阅读 · 0 评论 -
自己实现的二维数组
#include using namespace std;class Array2D{public: Array2D(int w, int h) { width = w; height = h; arr = new int*[height]; for(int i=0; i原创 2011-01-03 20:32:00 · 849 阅读 · 0 评论 -
C++多线程
<br />http://www.javaeye.com/topic/375400<br /> <br /> Windows API是应用程序与OS底层的一个接口,所以我认为只要我们会利用该接口,也就是调用好合适的方法,然后好好添加上适当的参数,就OK了。该编程方式比OpenMP方式,形式要麻烦些,但是如果使用合理的话,效率自然要高些。<br /> 线程管理<br /> 线程的创建调用CreateThread()方法。其中,填空的话,主要涉及到有六个参数:<br />第一个参数,是关于在系统原创 2011-01-04 19:58:00 · 747 阅读 · 0 评论 -
MFC中非模式对话框的细节
<br />无模式对话框与有模式对话框不同的是在创建后其他窗口都可以继续接收用户输入,因此无模式对话框有些类似一个弹出窗口。创建无模式对话框需要调用BOOL CDialog::Create( UINT nIDTemplate, CWnd* pParentWnd = NULL );之后还需要调用 BOOL CDialog::ShowWindow( SW_SHOW);进行显示,否则无模式对话框将是不可见的。相关代码如下: void CYourView::OnOpenDlg(void){ /*假设原创 2010-11-03 17:21:00 · 725 阅读 · 0 评论 -
11月1日学习小结
1、单件模式#include using namespace std;class Singleton{public: ~Singleton() { printf("析构函数"); } static Singleton* getInstance() { if (NULL == pInstance) { pInstance = new Singleton; } return pInstance; }private: sta原创 2010-11-01 21:09:00 · 794 阅读 · 0 评论 -
VC++平台下非MFC DLL的使用
<br />1、 静态链接库(1)、生成静态库文件在VC++6.0中new一个名称为libTest的static library工程,并新建lib.h和lib.cpp两个文件,lib.h和lib.cpp的源代码如下://文件:lib.h#ifndef LIB_H#define LIB_Hextern "C" int add(int x,int y); //声明为C编译、连接方式的外部函数#endif//文件:lib.cpp#include "lib.h"原创 2010-11-01 13:14:00 · 726 阅读 · 0 评论 -
STL中map用法详解
<br />STL中map用法详解说明:如果你具备一定的C++ template知识,即使你没有接触过STL,这个文章你也应该可能较轻易的看懂。本人水平有限,不当之处,望大家辅正。一.Map概述Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一种非严格意义上的平衡原创 2010-11-01 11:02:00 · 460 阅读 · 0 评论 -
vc中显示位图、图标的方法
<br />void CWyView::OnDraw(CDC* pDC){ CWyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); // TODO: add draw code for native data here CClientDC dc(this); dc.SetBkColor(RGB(255, 0, 0)); dc.SetTextColor(RGB(0, 0, 255)); dc.TextOut(100, 100, _T(原创 2010-10-31 21:29:00 · 3002 阅读 · 0 评论 -
VC++ Tab Control控件的使用
<br />1. 新建一个MFC工程, 取名MyTab, 选择Dialog based, 然后Finish. <br /><br />2. 删除对话框上默认添加的三个控件. 添加Tab Control控件并在Property属性中设置ID为IDC_TABTEST 在More Styles里勾上Bottom. 调速尺寸使其布满整个对话框, 我这边Tab Control的尺寸最后为164X203. 在ClassWizard为其添加变量, 变量名为m_tab. 类型为CTabCtrl. <br /><br />3原创 2010-10-29 16:08:00 · 533 阅读 · 0 评论 -
指针类型转换(非常棒非常全的一篇文章)
指针类型转换(非常棒非常全的一篇文章)http://blog.csdn.net/ZHANGJIETING/archive/2010/10/20/5953634.aspxhttp://tech.e800.com.cn/articles/2009/717/1247801913566_1.htmlhttp://dev.chinaitzhe.com/c/2008-06/121481133869042.html原创 2010-10-29 20:57:00 · 706 阅读 · 0 评论 -
autodesk电面
<br />autodesk电面,面的巨悲剧,后来才意识到问的问题都是“宝典”上面的,后悔没看完。不过意识到一个很严重的问题,很多东西理解了,就是讲不出来,这个在以后一定要注意!<br /> <br />下面是其中的一些问题:<br />1、一个队列实现栈2、两个栈实现队列3、快速排序4、封装、代理5、说几种设计模式6、4种转换运算符7、构造函数析函数能否调用虚函数8、空类默认实现的函数9、vc中assert与verify的区别10、模式对话框与非模式对话框11、讲下原创 2010-10-28 20:35:00 · 597 阅读 · 0 评论 -
C++内存管理神器之模板化的智能指针
先上代码(MinGW下编译测试通过):C++标准类库里面有实现智能指针auto_ptr,位于头文件。 view sourceprint?01/* 02 * SmartPointer.h 03 * 04 * Created on: 2010-10-27 05 * Author: LayzerAr 06 */07 08#ifndef __SMARTPOINTER_H_INCLUDE__ 09#define __SMARTPOINTER_H_INCLUDE__ 10 11template 12cl转载 2010-10-27 21:51:00 · 657 阅读 · 0 评论 -
使用CTabCtrl控件实现属性页功能
<br />使用CTabCtrl控件实现属性页功能 在视图窗口内加入CTabCtrl控件,设变量名为m_tab,新建两个对话框属性设为Child,None,用ClassWizard生成新的类,基类 为Cdialog,分别为Cpage1,Cpage2,ID号分别为IDD_DIALOG1,IDD_DIALOG2。在CtestView内加入两个变 量,Cpage1 page1;Cpage2 page2。 在CtestView的OnInitialUpdae()内初原创 2010-10-27 17:35:00 · 687 阅读 · 0 评论 -
虚函数、虚继承、sizeof
<br />// 练习.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <iostream>using namespace std;class A{public: A(){} A(int a):m_a(a){} virtual void print() { cout<<"A::"<<m_a<<endl; }private: int m_a;};class B:public virtu原创 2010-10-19 14:37:00 · 7421 阅读 · 7 评论 -
模板
<br />1.声明部分 // Tpl.h#pragma oncetemplate<class T>class CTpl {public: CTpl(); virtual ~CTpl(); void Test(T t);};2.实现部分 // Tpl.cpp#include "Tpl.h"template<class T>CTpl<T>::CTpl(){}template<class原创 2010-10-19 10:54:00 · 887 阅读 · 0 评论 -
学习小结
二叉树不是树 因为它是有序的二叉树如果只有一个孩子,它要确定是左孩子或右孩子,而度数为二的有序树虽然很象二叉树,但是当结点只有一个孩子时,就无须区分它是左还是右的次序。因此二者是不同的。原创 2010-10-19 20:16:00 · 704 阅读 · 0 评论 -
法特视笔试小结——2010年10月18日
<br />#include <iostream>#include <iterator>#include <fstream>#include <vector>#include <algorithm>using namespace std;/* 从一个文件1.txt中读取一些整数,然后排序,将排序后的结果写到文件2.txt,并 在屏幕上显示。 下面是C++的实现方法!*/int main(){ ifstream in; ofstream out;原创 2010-10-19 08:33:00 · 696 阅读 · 0 评论 -
私有继承
<br />// 练习.cpp : 定义控制台应用程序的入口点。#include "stdafx.h"#include <iostream>using namespace std;/* 私有继承的两个原则: (1)、和公有继承相反,如果两个类之间的继承关系为私有,编译器一般不会将派生类对象(如Child)转换成基类对象(如Parent) (2)、从私有基类继承而来的成员都成为了派生类的私有成员,即使它们在基类中是保护或公有成员 大家可以看出私有继承时派生类与基类不是“原创 2010-10-15 21:02:00 · 1726 阅读 · 0 评论 -
C++经典问答——读书笔记
1、不要在C++中调用longjmp,因为他会打破析构函数将被调用的顺序。http://blog.sina.com.cn/s/blog_4d8498800100bonm.html2.inline函数是否可以访问静态成员变量可以啊,内联函数就相当于把函数展开,所以就相当于一系列语句,并不是真正的函数。可以,inline 只是提供给编译器的一个建议,具体怎么做要看实际情况而定,比如说如果函数内出现循环,那么编译器通常不会将其内联。而且是否内联可以通过一系列编译选项和宏来控制,即便如此,具体怎么做仍要看编译器,也原创 2011-01-05 20:12:00 · 1204 阅读 · 0 评论 -
学习笔记
<br />// wy.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ cin.ignore(2); //ignore()函数用来忽略读取的字节 char c = cin.get();//get()用来读取一个字符 cout<<c<<endl; cout.put('c原创 2010-11-15 15:12:00 · 602 阅读 · 0 评论 -
《C标准库》学习笔记
11月20日1、#undef宏的意思#undef仅是取消前面的宏定义,为了不影响其他模块预处理指令是在编译的过程中处理的,不是运行中处理的,因此放在return之后也没有问题,预处理的时候一样会处理那个#undef。http://baike.baidu.com/view/1998342.htm2、assert的详解http://wzw19191.blog.163.com/blog/static/1311354702009926105524452/http://topic.csdn原创 2010-11-20 19:58:00 · 1797 阅读 · 0 评论 -
爱立信笔试
1、堆和栈的区别、分配方式、字节对齐 字节对齐:http://blog.csdn.net/zzffly9/archive/2007/10/26/1844421.aspx union u2 { char a[13]; int b; }; cout 2、进程和线程的区别 进程:程序的一次动态执行,是资源分配的基本单位。 线程:进程中执行的最小原创 2011-06-29 15:12:00 · 6776 阅读 · 1 评论 -
extern用法详解(转)
1 基本解释 extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义。 另外,extern也可用来进行链接指定。2 问题:extern 变量 在一个源文件里定义了一个数组:ch原创 2011-09-02 17:18:20 · 75 阅读 · 0 评论 -
求集合的子集、全排列总结
1、求子集输出n个元素的集合所有的子集,如{a,b,c}的子集就有{},{a},{b},{c},{a,b},{a,c},{b,c},{a,b,c}。方法1:利用2进制的表示/*对于集合{A,B,C,D},它的非空子集个数为2×2×2×2-1,用二进制表示就是1111,我原创 2011-07-27 12:28:53 · 454 阅读 · 0 评论 -
一些笔记
1、下面这个参数const,为什么可以改变参数?void fun(const auto_ptr &pointer){ *pointer = 4; pointer.reset(new int(2)); //这一句编译不通过,所以pointer为const,但是可以更改指向的数据}原创 2011-07-07 16:20:55 · 933 阅读 · 0 评论 -
条款20:为指针的关联容器指定比较类型——effective STL
<br />#include <iostream>#include <iterator>#include <ctime>#include <set>#include <iterator>#include <string>using namespace std;struct StringPtrLess: public binary_function<string*, string*, bool> //使用这个基类的理由参见条款40{ bool operator()(c原创 2011-04-16 20:55:00 · 587 阅读 · 0 评论 -
6月6日一些C++和C的知识点
1 char a[1000]; int i; for (i = 0; i { a[i] = -1 - i; } printf("%d", strlen(a)); 输出结果为:255 2 int a[3][2] = {(0, 1), (2, 3), (4, 5)}; int *p = a[0]; printf("%d", p[原创 2011-06-06 13:41:00 · 809 阅读 · 0 评论 -
Effective STL学习笔记
#include "stdafx.h"#include #include #include using namespace std;//条款7:当使用new得指针的容器时,记得在销毁容器前delete那些指针class Wigdet{public: Wigdet(){} ~Wigdet(){ cout void operator() (T *ptr){ delete ptr; }};int main(){ vector vec; for (in原创 2011-04-08 16:12:00 · 713 阅读 · 0 评论 -
使用MFC 发送消息模拟按钮按下事件
<br />有时我们需要这么做, 手动模拟按钮按下的事件, 让程序做出与按钮真的按下时一样的响应. 设按钮ID为ID_BTN_OK, 当前Dialog窗口. 实际上系统并不能区分按钮是真的按下了(如用鼠标点击), 还是一个我们自己用代码模拟出的一种"假象".它所需要知道的只是哪个窗口(按钮也是一种窗口)发生了哪一种事件, 然后在消息循环中处理它. 系统怎么才能知道这些呢? 当然靠的是消息(message), 我们只需按照Windows或者MFC的标准格式把相应的信息传给系统,系统就会"上当"了.转载 2011-03-24 17:53:00 · 4083 阅读 · 3 评论 -
2011年3月24日——学习笔记
<br />1、容器和容器适配器有什么区别和联系,为什么容器适配器模板要提供两个类型,这两个类型各代表什么?<br />容器vector,list,deuqe是C++STL中三种基本容器实现,它们不可能互为实现同时又不损失效率, 就像颜色中的三原色红绿蓝可以混成其他多种颜色.而stack和queue则都可以在这三种基本容器序列基础上高效实现, 所以没有定义为独立的容器,而只作为基本容器适配器.所以容器适配器所提供的是原来容器的一个受限的界面, 特别是适配器不提供迭代器. 所有stack和queue是原创 2011-03-24 17:49:00 · 706 阅读 · 0 评论 -
5月11日——中兴暑期实习笔试
<br />选择题都是具简单的选择题,简单的以至于不会做。<br /> <br />int a[2][2] = {0};是正确的,没个元素都为0.<br /> <br />int a[2][2] = {{0}, {2, 3}};也是正确的,元素分别为0,0,2,3.<br /> <br />软件模块间的接口有哪几种?每种接口的调用方式?<br /> <br /><br />软件模块之间总是存在着一定的接口,从调用方式上,可以把他们分为三类:同步调用、回调和异步调用。同步调用是一种阻塞式调用,调用方要等待对方原创 2011-05-11 16:29:00 · 1332 阅读 · 0 评论 -
3月10学习笔记
<br />1、关于stl<br />#include <iostream>#include <vector>#include <iterator>#include <algorithm>#include <functional>using namespace std;class GT_cls{public: GT_cls(int val) : value(val) {} bool operator() (int other) {原创 2011-03-10 18:00:00 · 698 阅读 · 0 评论 -
精确统计程序运行时间
<br />#include <time.h>LARGE_INTEGER startCount;LARGE_INTEGER endCount;LARGE_INTEGER freq;QueryPerformanceFrequency(&freq);QueryPerformanceCounter(&startCount);QueryPerformanceCounter(&endCount);double elapsed = (double)(endCount.QuadPart -原创 2011-03-09 13:13:00 · 927 阅读 · 0 评论 -
通过引用计数实现智能指针(C++ Primer)
<br />#include <iostream>using namespace std;/************************************************************************//* 目的:通过引用计数实现智能指针 *//*********************************************************************原创 2011-03-10 10:03:00 · 2419 阅读 · 1 评论 -
学习笔记——3月4日
1、基类指针指向派生类对象和派生类指针指向基类对象#include using namespace std;class Base{public: virtual void f1() { coutf1(); p1->f2(); //派生类指针指向基类 Derived *p2 = (Deri原创 2011-03-04 12:04:00 · 716 阅读 · 0 评论 -
学习笔记——3月4日
<br />1、基类指针指向派生类对象和派生类指针指向基类对象<br />#include <iostream>using namespace std;class Base{public: virtual void f1() { cout<<"Base::f1()"<<endl; } void f2() { cout<<"Base::f1()"<<endl; }};class Derived : public Base{public:原创 2011-03-04 12:04:00 · 606 阅读 · 0 评论 -
继承的时候,子类的拷贝构造函数和重载运算符的实现
<br />#include <iostream>using namespace std;class Parent{public: Parent(){} Parent(int a):m_a(a){} Parent(const Parent& other):m_a(other.m_a) { cout<<"Parent 拷贝构造函数"<<endl; } Parent& operator= (const Parent& other) { cout<<"Par原创 2011-01-13 11:10:00 · 4912 阅读 · 1 评论 -
深度探索 C++对象模型——读书笔记
<br />#include <cstdlib>#include <iostream>using namespace std;class Point3D{public: Point3D(int _x, int _y, int _z):x(_x),y(_y),z(_z){} float x, y, z; float getX(){return x;} float getY(){return y;} float原创 2010-12-05 16:57:00 · 829 阅读 · 0 评论 -
面试宝典学习笔记---10月11日
<br />/* 一个5位数字ABCDE*4 = EDCBA,这5个数字不重复,请编程求出这个5位数字 思想:针对每一个i即(ABCDE)求出对应的j(EDCBA),然后判断i*4与j是否相等,相等既满足条件*/int main(){ for (int i=10000; i<100000; i++) { int j = 0; int t = i; while (t != 0) { j = j*10 + t%10; t = t/10;原创 2010-10-11 22:03:00 · 695 阅读 · 0 评论 -
C语言:内存字节对齐详解[转载]
<br />一、什么是对齐,以及为什么要对齐:<br /><br />1. 现代计算机中内存空间都是按照byte划分的,从理论上讲似乎对任何类型的变量的访问可以从任何地址开始,但实际情况是在访问特定变量的时候经常在特定的内存地址访问,这就需要各类型数据按照一定的规则在空间上排列,而不是顺序的一个接一个的排放,这就是对齐。<br /><br />2. 对齐的作用和原因:各个硬件平台对存储空间的处理上有很大的不同。一些平台对某些特定类型的数据只能从某些特定地址开始存取。其他平台可能没有这种情况, 但是最常见的是转载 2010-10-11 22:41:00 · 476 阅读 · 0 评论