当前位置:  编程技术>c/c++/嵌入式
本页文章导读:
    ▪Windows API 逐个逐个学(1)---- 常用的Windows基本数据类型           先来个表格:类       型VB6 声明描                   述BOOL  Long布尔型变量(值只能是True或False)BYTEByte字节类型(8位)CHARByt.........
    ▪C++ auto_ptr的实现问题      最近开始琢磨C++标准库的细节问题,并阅读相关的书籍。今天在看The C++ Standard Library。看到C++标准库中的auto_ptr实现问题时,觉得很有趣,于是就打算自己试试,写了一个简单的AutoPointer,叫.........
    ▪C++初学者---五位数数字黑洞问题      数字黑洞问题:任意一个五位数,调整其各位数字,分别组成一个最大数字和一个最小数字;将其差值再作为新的数(如果不足5位,则前边补0),再次进行上一操作,直到出现循环。例如4167.........

[1]Windows API 逐个逐个学(1)---- 常用的Windows基本数据类型
    来源:    发布时间: 2013-10-17

     先来个表格:

类       型VB6 声明描                   述BOOL  Long布尔型变量(值只能是True或False)BYTEByte字节类型(8位)CHARByte8比特字节(ANSI)CONST 常量,相当于标准C中的"const"关键字DWORDLong4字节无符号整型数据DWORD32Long4字节无符号整型数据DWORD64 8字节无符号整型数据FLOATSingle浮点数据类型HANDLELong对象的句柄,最基本的数据类型HICONLong图标的句柄HINSTANCELong程序实例的句柄HKEYLong注册表键的句柄HMODULELong模块的句柄HWNDLong窗口的句柄INTLong32位有符号整型数据类型INT_PTRLong指向INT类型数据的指针类型INT32Long32位有符号整数INT64 64位有符号整数LONGLong32位有符号整数,相当于C语言的标准数据类型LongLONGLONG 64位有符号整数LONG32Long32位有符号整数LONG64 64位有符号整数LPARAMLong消息的L参数WPARAMLong消息的W参数LPCSTRStringWindows(ANSI)字符串常量LPCTSTRString根据环境配置,如果定义了UNICODE宏,则是LPCWSTR类型
否则是LPCSTR类型LPCWSTRStringUNICODE 字符串常量LPDWORDLong指向DWORD类型数据的指针LPSTRStringWindows(ANSI)字符串变量LPWSTRString根据环境配置,如果定义了UNICODE宏,则是LPWSTR类型
否则是LPSTR类型SHORTInterger16位有符号整数SIZE_T 表示内存大小,以字节为单位,其最大值是CPU最大寻址范围TCHARByte根据环境配置,如果定义了UNICODE宏,则是WCHAR类型
否则是CHAR类型UCHARByte无符号CHARUINTLong无符号INTULONGLong无符号LONGVOIDSub过程,不用无类型,相当于标准C语言的VoidWCHARByte16位Unicode字符WINAPI
    
[2]C++ auto_ptr的实现问题
    来源:    发布时间: 2013-10-17

最近开始琢磨C++标准库的细节问题,并阅读相关的书籍。

今天在看The C++ Standard Library。看到C++标准库中的auto_ptr实现问题时,觉得很有趣,于是就打算自己试试,写了一个简单的AutoPointer,叫做SimpleAutoPointer

代码如下

1 #ifndef _AUTOPTR1_H
2 #define _AUTOPTR1_H
3
4 template <class ElementType>
5 class SimpleAutoPointer {
6 public:
7 // class for the value
8 typedef ElementType element_type;
9
10 // constructor
11 explicit SimpleAutoPointer(ElementType* pointer = 0) throw() :
12 m_Pointer(pointer) {}
13
14 // copy constructors
15 // - note: nonconstant parameter
16 SimpleAutoPointer(SimpleAutoPointer& rhs) throw() :
17 m_Pointer(rhs.release()) {}
18 template <class AnotherElementType>
19 SimpleAutoPointer(SimpleAutoPointer<AnotherElementType>& rhs) throw() :
20 m_Pointer(rhs.release()) {}
21
22 // assignments
23 SimpleAutoPointer& operator=(SimpleAutoPointer& rhs) throw(){
24 reset(rhs.release());
25 }
26 template<class AnotherElementType>
27 SimpleAutoPointer& operator=(SimpleAutoPointer<AnotherElementType>& rhs) throw(){
28 reset(rhs.release());
29 }
30
31
32 // destructor
33 ~SimpleAutoPointer() throw(){
34 if ( m_Pointer ) {
35 delete m_Pointer;
36 }
37 }
38
39 // value access
40 ElementType* get() const throw(){
41 return m_Pointer;
42 }
43 ElementType& operator*() const throw(){
44 return *m_Pointer;
45 }
46 ElementType* operator->() const throw(){
47 return m_Pointer;
48 }
49
50 // release ownership
51 ElementType* release() throw(){
52 ElementType* oldPointer = m_Pointer;
53 m_Pointer = 0;
54 return oldPointer;
55 }
56
57 // reset value
58 void reset(ElementType* newPointer) throw(){
59 if ( m_Pointer ) {
60 delete m_Pointer;
61 }
62
63 m_Pointer = newPointer;
64 }
65
66 private:
67 ElementType* m_Pointer;
68 };
69
70 #endif //_AUTOPTR1_H

很简单,所有的接口全部按照标准库的auto_ptr写的。一开始觉得这段代码应该没有问题,但其实和标准库的auto_ptr行为有一个不同。

我们看看使用这个类的代码,可以看出问题所在

首先是两个简单的类,用来辅助测试

1 #ifndef _TESTCLASS_H
2 #define _TESTCLASS_H
3
4 #include <iostream>
5
6 class BaseClass {
7 public:
8
    
[3]C++初学者---五位数数字黑洞问题
    来源:    发布时间: 2013-10-17

数字黑洞问题:任意一个五位数,调整其各位数字,分别组成一个最大数字和一个最小数字;将其差值再作为新的数(如果不足5位,则前边补0),再次进行上一操作,直到出现循环。例如41679,首次得差值82962,继续进行,则产生75933,63954,61974。由此构成一个循环数。
输入:41679
输出:[82962,75933,63954,61974]

某软件大赛题目(题目要求列出所有五位数,为便于调试和观察代码仅列出10个数,可自行修改循环条件遍历),解决思路如下:

1、拆分各位数并保存,对拆分后的数排序、构造最大和最小值,求出差值;

2、判断是否出现循环,出现即终止进入下一轮。

欢迎拍砖,^_^

#include <iostream>
#include <vector>
#include <iomanip>

using namespace std;

// 从小到大快速排序
void QuickSort(int *pdata, int start, int end)
{
if (start >= end)
{
return;
}

int itemp = start - 1;
int key = pdata[end];
int index;
for (index = start; index < end; index++)
{
if (pdata[index] < key) // 把比key小的数放在左边,大的放在右边。确定分割点
{
swap(pdata[index], pdata[++itemp]);
}
}
swap(pdata[itemp+1], pdata[end]);

// 分成两部分后重排
QuickSort(pdata, start, itemp);
QuickSort(pdata, itemp + 2, end);
}

// 返回重新排列后的最大、最小数差值
int BlackHole(int number)
{
const int size = 5;
int i = 0;
int save[size];
const int ten = 10;
for (i = 0; i < size; i++)
{
save[i] = number % ten; // 拆分整数并保存
number /= ten;
}

QuickSort(save, 0, sizeof(save) / sizeof(save[0]) - 1);
int max = 0;
int min = 0;
for (i = 0; i < size; i++)
{
max += save[size - 1 - i]; // 构造最大、最小值
max *= ten;

min += save[i];
min *= ten;
}
return (max - min) / ten;
}

// 判断最新结果与之前存取的是否有相同的,有返回true反之返回false
bool IsSame(int black)
{
static vector<int> save; // 找到相同数之前,前面的数仍需保留用以比较,故用static,否则会清掉
save.push_back(black);
for (int i = 0; i < save.size(); i++)
{
if (save[i] == black && (save.size() - 1) != i)
{
save.clear(); // 若找到相同的数则清掉数据,进行下一个数的判断
return true;
}
}

return false;
}

int main(int argc, char **argv)
{for (int i = 10000; i < 10011; i++)
{
int temp = BlackHole(i);
cout << i << ": " ;
while (false == IsSame(temp)) // 找到相同的数即终止进入下一轮
{
cout << setw(5) << temp << '\t' ;
temp = BlackHole(temp);
}
//cout << temp << endl;
cout << endl;
}
//cout << BlackHole(97911);
cout << endl;

return 0;
}

 

本文链接


    
最新技术文章:
▪C++单例模式应用实例
▪C++设计模式之迭代器模式
▪C++实现动态分配const对象实例
▪C++设计模式之中介者模式
▪C++设计模式之备忘录模式
▪C++插入排序算法实例
▪C++冒泡排序算法实例
▪C++选择排序算法实例
▪C++归并排序算法实例
▪C++设计模式之观察者模式
▪C++中复制构造函数和重载赋值操作符总结
▪C++设计模式之状态模式
▪C++设计模式之策略模式
▪C++设计模式之访问者模式
▪C++设计模式之模板方法模式
▪C++实现下载的代码
▪C++模板之特化与偏特化详解
▪C++实现查壳程序代码实例
▪C语言、C++内存对齐问题详解
▪C语言、C++中的union用法总结
▪C++基于CreateToolhelp32Snapshot获取系统进程实例
▪C++中memcpy和memmove的区别总结
▪C++通过TerminateProess结束进程实例
▪C++内存查找实例
▪C++实现CreatThread函数主线程与工作线程交互的...
▪C++设计模式之桥接模式
▪C++中关键字Struct和Class的区别
▪C++设计模式之组合模式
▪C++ COM编程之什么是组件?
▪C++ COM编程之什么是接口?
 


站内导航:


特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3