文章分类 - C++基础知识
C++ 点滴
摘要:string 与 wstring 相互间的转换第一种方法调用Windows的API函数WideCharToMultiByte()函数和MultiByteToWideChar()函数第二种方法使用ATL的CA2W类和W2CA类。或使用A2W宏与W2A宏。第三种方法跨平台的方法,使用CRT库的mbstowcs()函数和wcstombs()函数,需设置localestring ws2s(const wstring str){ size_t _DSize = 2*str.size()+1; char * _Dest = new char[_DSize]; memset(_Dest, ...
阅读全文
摘要:#ifndef QUEUETP_H_#define QUEUETP_H_template<class Item>class QueueTP{private: enum{Q_SIZE = 10}; class Node { public: Item item; Node * next; Node(const Item & i):item(i),next(0){} }; Node * front; Node * rear; int items; const int qsize; QueueTP(c...
阅读全文
摘要:将多字节整数类型的数据,从主机的字节顺序转化为网络字节顺序原型:#include <netinet/in.h>uint32_t htonl(uint32_t hostlong);uint16_t htons(uint16_t hostshort);uint32_t ntohl(uint32_t netlong);uint16_t ntohs(uint16_t netshort);描述:不同的计算机里对它们的多字节整数(例如:一个大于char的整数)使用不同的字节顺序。这就意味着,如果你从intel的盒子中send()一个两个字节的短整数到一个Mac中(在它们成为Intel之前),一
阅读全文
摘要:原来,UDP通信,比我想象中简单的多!// WindowsSocketServer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <string>#include <Windows.h>#include <Winsock2.h>#include <fstream>#pragma comment(lib,"Ws2_32.lib")using namespace std;#define PORT 8080#d
阅读全文
摘要:1 // WindowsSocketServer.cpp : 定义控制台应用程序的入口点。 2 // 3 4 #include "stdafx.h" 5 #include <iostream> 6 #include <string> 7 #include <Windows.h> 8 #include <Winsock2.h> 9 #include <fstream> 10 #pragma comment(lib,"Ws2_32.lib") 11 12 using namespace std; 1
阅读全文
摘要:// TimerTest.cpp : Using STL functions//并集,交集,差集,根据bound获取特定子集#include "stdafx.h"#include <iostream>#include <string>#include <vector>#include <set>#include <algorithm>#include <iterator>using namespace std;int _tmain(int argc, _TCHAR* argv[]){ const int
阅读全文
摘要:在STL中基本容器有: string、vector、list、deque、set、mapset 和map都是无序的保存元素,只能通过它提供的接口对里面的元素进行访问set:集合, 用来判断某一个元素是不是在一个组里面,使用的比较少map:映射,相当于字典,把一个值映射成另一个值,如果想创建字典的话使用它好了string、vector、list、deque、set 是有序容器1.stringstring 是basic_string<char> 的实现,在内存中是连续存放的.为了提高效率,都会有保留内存,如string s= "abcd",这时s使用的空间可能就是2
阅读全文
摘要:// TimerTest.cpp : Using STL functions//#include "stdafx.h"#include <iostream>#include <string>#include <vector>#include <algorithm>using namespace std;struct Review{ string title ; int rating ;};bool operator<(const Review &r1,const Review &r2);bool wors
阅读全文
摘要:之所以抛弃char*的字符串而选用C++标准程序库中的string类,是因为他和前者比较起来,不必担心内存是否足够、字符串长度等等,而且作 为一个类出现,他集成的操作函数足以完成我们大多数情况下(甚至是100%)的需要。我们可以用 = 进行赋值操作,== 进行比较,+ 做串联(是不是很简单?)。我们尽可以把它看成是C++的基本数据类型。 好了,进入正题………首先,为了在我们的程序中使用string类型,我们必须包含头文件 。如下: #include //注意这里不是string.h string.h是C字符串头文件1.声明一个C++字符串声明一个字符串变量很简单: string Str;这样我
阅读全文
摘要:在进行多线程编程时,难免还要碰到两个问题,那就线程间的互斥与同步:线程同步是指线程之间所具有的一种制约关系,一个线程的执行依赖另一个线程的消息,当它没有得到另一个线程的消息时应等待,直到消息到达时才被唤醒。线程互斥是指对于共享的进程系统资源,在各单个线程访问时的排它性。当有若干个线程都要使用某一共享资源时,任何时刻最多只允许一个线程去使用,其它要使用该资源的线程必须等待,直到占用资源者释放该资源。线程互斥可以看成是一种特殊的线程同步(下文统称为同步)。线程间的同步方法大体可分为两类:用户模式和内核模式。顾名思义,内核模式就是指利用系统内核对象的单一性来进行同步,使用时需要切换内核态与用户态,而
阅读全文
摘要:1 // MultiThreadTest.cpp : Defines the entry point for the console application. 2 // Thread 创建,挂起等 3 4 #include "stdafx.h" 5 #include<Windows.h> 6 #include<iostream> 7 #include<string> 8 using namespace std; 9 DWORD WINAPI myThread(LPVOID argv);//声明一个线程函数10 int _tmain(int
阅读全文
摘要:// WindowsSocketServer.cpp : 定义控制台应用程序的入口点。//#include "stdafx.h"#include <iostream>#include <Windows.h>#include <Winsock2.h>#pragma comment(lib,"Ws2_32.lib")using namespace std;#define PORT 8081#define IP_ADDRESS "172.16.20.181"DWORD WINAPI ClientThrea
阅读全文
摘要:bool CreateXmlFile(const char *szFileName){ //创建xml文件,szFileName为文件保存的路径,若创建成功返回true,否则false try { //创建一个XML的文档对象 TiXmlDocument *myDocument=new TiXmlDocument(); //创建一个Person 元素并连接 TiXmlElement *RootElement=new TiXmlElement("Persons"); myDocument->LinkEndChild(RootElement); //创建一个Person元
阅读全文
摘要:线程同步是多线程程序设计的核心 内容,它的目的是正确处理多线程并发时的各种问题,例如线程的等待、多个线程访问同一数据时的互斥,防死锁等。Win32提供多种内核对象和手段用于线程 同步,如互斥量、信号量、事件、临界区等。所不同的是,互斥量、信号量、事件都是Windows的内核对象,当程序对这些对象进行控制时会自动转换到核心 态,而临界区本身不是内核对象,它是工作在用户态的。我们知道从用户态转换到核心态是需要以时间为代价的,所以如果能在用户态就简单解决的问题,就可以不 必劳烦核心态了。 这里我要说的是两种用于C++的多线程同步类,通过对这两种类的使用就可以方便的实现对变量或代码段的加锁控制,从而.
阅读全文
摘要://////获取系统信息Demo///#include "stdafx.h"#include<windows.h>#include<conio.h>#include<tchar.h>#include<locale.h>#include"Reader.h"#include"Writer.h"#include<stdlib.h>#include<iostream>using namespace std;wchar_t* envVarStrings[]={ TEXT(&
阅读全文
摘要:// Writer.cpp#include"stdafx.h"#include <windows.h>#include <conio.h>#define BUF_SIZE 256wchar_t szName[30]=TEXT("Global\\MyFileMappingObject");wchar_t szMsg[30]=TEXT("Message from first process.");wchar_t chr[100]; int _tmain(){ HANDLE hMapFile; LPCTSTR pBu
阅读全文
摘要:1 int _tmain(int argc, _TCHAR* argv[]) 2 { 3 HANDLE handle; 4 wchar_t szFile[64] = L"kingdom_0,你好"; 5 unsigned long lWritten, lRead; 6 handle=CreateFile(L"D:\\Example.txt", FILE_ALL_ACCESS, FILE_SHARE_READ|FILE_SHARE_WRITE, 7 NULL, OPEN_ALWAYS...
阅读全文
摘要:堆和栈的区别(转贴)非本人作也!因非常经典,所以收归旗下,与众人阅之!原作者不祥!堆和栈的区别一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一
阅读全文
摘要:1.函数指针double pam(int);double (*pf) (int);pf=pam;double x=pam(6);double y=(*pf)(6);//通过double yy=pf(5);//通过历史和逻辑:为何pf和(*pf)等价呢?一种学派认为,由于pf是函数指针,而*pf是函数,因此应将(*pf)()用过函数调用。另一种学派认为,由于函数名是指向该函数的指针,指向函数的指针的行为应与函数名相似,因此应将pf()用作函数调用使用。C++进行了折衷--这两种方式都是正确的,或者至少是允许的,虽然他们在逻辑上是相互冲突的。在认为折衷折衷粗糙之前,应该想到,容忍逻辑上无法自圆其说
阅读全文
摘要:1.使用new和delete时,应遵守以下规则:* 不要是用delete来释放不是new分配的内存。* 不要是用delete释放同一个内存块两次。* 如果是用new[]为数组分配内存,则应使用delete来释放。* 如果使用new[]为一个实体分配内存,则应使用delete(没有方括号)来释放。* 对空值指针应用delete是安全的。2.一般来说,如果给count提供一个指针,它将打印地址。但如果指针的类型为char *,则cout将显示指向的字符串。如果要限制的是字符串的地址,则必须将这种指针强制转换为另一种指针类型,如int *。char *animal="dog";c
阅读全文