(1)map:
提供一对一的关键字,每个关键字在map中出现一次。
map: key,value
构造函数的结构:
map <key_type, value_type> map_show;
map的构造函数:
map<string, int> mapstring;
map<int,string> mapint;
map<string, char> mapstring;
添加数据:
map<int,string> maplive;
1) maplive.insert(pair<int,string>(102, "aclive"));
2) maplive.insert(map(int,string)::value_type(311 ,"hai"))
3) maplive[112] = "April";
查找:
map<int ,string> ::iterator l_it;
l_it = map.find(112);
if(l_it == maplive.end())
cout<<"we do not find 112"<<endl;
else
cout<<"we find 112"<<endl;
删除:
map<int ,string> ::iterator l_it;
l_it = map.find(112);
if(l_it == maplive.end())
cout<<"we do not find 112"<<endl;
else
maplive.erase(l_it);
(2)适配器:
和顺序容器结合,提供了堆栈,队列和优先队列的功能;
标准的顺序容器适配器的种类:
a. queue:先进先出;
b. stack:栈,先进后出;
c. priority_queue:优先级队列
头文件:#include <stack>
#inlcude <queue>
容器的格式:
template <class T, class constain = dequeue<T>> class stack;
T:类型; contain:容器类型,默认deque;
stack:先进后出,栈
stack模版:有两个模版参数,一个是元素类型,一个是容器类型。元素类型必要的,容器类型可以
不指定,默认deque;
stack<int>s1;
stack <string>s2;
基本操作:
入栈:s.push(x);
出栈:s.pop(x);
访问栈顶:s.top();
判断栈空不空: s.empty(); 空时返回true;
栈中的元素个数:s.size();
(3)线程的创建函数CreateThread:
包含的头文件:#include <windows.>
函数的作用:创建线程
函数的原型:
HANDLE WINAPI CreateThread(
_in_opt LPSECURITY_ATTRIBUTES lpThreadAttributes,
_in SIZE_T dwStackSize,
_in LPTHREAD_START_ROUTINE lpStartAddress,
_in_opt LPVOID lpParameter,
_in DWORD dwCreationFlags,
_out_opt LPDWORD lpThreadID
);
函数的参数:
lpThreadAttributes:安全属性,NULL表示使用缺省值。
dwStackSize:初始堆栈的大小,0代表使用默认大小,1MB。
lpStartAddress:新线程的函数;
lpParameter:传递到新线程的参数;
dwCreationFlags:允许产生一个暂时挂起的线程,默认情况是立即开始执行;
如果是0表示线程准备好就立即运行;
CREATE_SUSPENDED:新线程处于挂起状态,需要使用ResumeThread函数将线程转移到准备好状态;
lpThreadID: 指向一个接收新线程标识符的DWORD。指针可以为NULL,表示无需返回线程ID。
返回值: 创建成功,返回一个handle。否则false;
失败可以调用GetLastError()获知原因;
(4) ExitThread:
函数的作用:在线程内部退出一个线程;
函数原型: VOID ExitThread(DWORD dwExitCode)
函数参数:指定此线程的退出代码;
返回值:无
(5)CloseHandle():
函数原型:BOOL CloseHandle(HANDLE hobject );
函数的功能: 将内核对象引用计数减一;
返回值: 成功,返回一个非0值;
失败,返回值是0;
(6)SuspendThread:
函数的作用: 用于挂起指定的线程,如果函数执行成功,则线程的执行被终止;
函数原型: DWORD SuspendThread(HANDLE hThread);
参数:hThread:要挂起线程的句柄;
返回值:成功返回大于0 的数,表示线程之前挂起的计数。失败返回-1;
(7)ResumeThread:
函数功能:线程挂起计数减1,当挂起计数为0时,结束线程的挂起状态,执行线程。
函数原型: DWORD ResumeThread(HANDLE hThread)
函数的参数: hThread: 指向要被回复的线程的句柄;
(8)WaitForSingleObject:
函数的作用:等待核心对象处于激发状态或者超时;
函数的原型:
DWORD WINAPI WaitForSingleObject(
__in HANDLE hHandle,
__in DWORD dwMilliseconds
);
返回值:WAIT_ABDNDONED(0x00000080)
WAIT_OBJECT_0 (0x00000000L)
WAIT_TIMEOUT(0x00000102)
WAIT_FAILED(0xFFFFFFFF)
(9)GetExitCodeThread:
函数的作用:获得指定线程的终止状态;
函数原型:
BOOL WINAPI GetExitCodeThread(
__in HANDLE hThread,
__out LPDWORD lpExitCode
);
返回值:成功,非0;失败,0;
(10)TerminateThread:
函数的作用:在线程外部强制结束一个线程;
函数原型:
BOOL WINAPI TerminateThread(
__inout HANDLE hThread, 线程句柄
__in DWORD dwExitCode 线程的结束吗
);
返回值:成功TRUE,失败FALSE
(11) Winsock:
在调用Winsock之前,必须检查协议栈的安装情况;
int WSAStartup(
WORD wVersionRequested,
LPWSADATA lpWSAData
)
函数的参数:
wVersionRequesed:是WORD型(双字节)数值,指定使用的版本号;
对Winsokc2.2 ,版本值是0x0202,可以用MAKEWORD(2,2) 获得;
lpWSAData:是一个指向WSADATA的结构指针,
返回值:
成功,返回的是0,出错是错误码;
(12)Winsock启动:
#include <Winsock2.h>
WORD wVersionRequested;
WSADATA wsaData;
wVersionRequest = MAKEWORD(2,2);
if(WSAStartup(wVersionRequest,&wsaData ) != 0)
{
//error;
return;
}
if(wsaData.wVersion != wVersionRequested)
{
//Winsock版本不匹配
WSACleanup();
return ;
}
(13)WSACleanup():
函数的作用: 中止winsock2的DLL的使用(Ws2_32.dll);
函数的原型: int WSACleanup(void);
返回值:成功返回0;出错的就是SOCKET_ERROR返回;可以调用:WSAGetLastError();
(14)socket:
函数作用:建立socket对象;
函数原型:SOCKET socket(int af,int type,int protocol);
参数: af: AF_INET;IPV4的协议;
type:TCP---SOCK_STREAM
UDP---SOCK_DGRAM;
SOCK_RAW;
protocol: TCP---IPPROTO_TCP;
UDP--IPPROTO_UDP
RAW---IPPROTO_RAW;
返回值: 成功返回socket对象;失败返回INVALID_SOCKET
(15)bind:
函数原型:
int bind(SOCKET s,
const struct sockaddr FAR * name,
int namelen);
返回值:成功返回0,失败返回SOCKET_ERROR,使用WSAGetLastError()获得具体的错误号。
函数的参数:
s:socket返回的对象;
name: struct sockaddr_in的参数;
struct sockaddr_in{
short sin_family;
u_short sin_port;
struct in_addrsin_addr;
charsin_zero[8];
}
IP地址为INADDR_ANY:由系统内核来分配IP地址;
port 为0, 系统指派1024~5000之间的端口;
(16)send:
函数的作用:在已经建立的套接字上发送数据
函数的原型:int send( SOCKET s,const char FAR * buf,int len,int flags);
函数参数:
s用于标识已建立连接的套接字
buf是一个字符缓冲区,内有将要发送的数据
len即将发送的缓冲区中的字符数
flags: 控制数据传送方式,
0:正常;
MSG_DONTROUTE:系统目标主机在直接连接的本地网络中,无需路由选择;
MSG_OOB:按照带外数据发送。
(17)recv:
函数的作用:从套接字上接收数据;
函数原型:int recv(SOCKET s,char FAR * buf,int len,int flags);
函数参数:
s为已建立连接的套接口
buf为用于接收数据的缓冲区
len为缓冲区的长度
flags:0正常的数据接送;
MSG_PEEK:有用的数据复制到数据缓冲区中,没从系统缓冲区中去除;
MSG_OOB:处理带外数据;
(18)shutdown:
在一个套接口上的读写操作完成后,应该首先使用shutdown()函数来关闭套接口的读通道、写通道或读写通道,
这样做的好处是当双方不再有数据要发送或接收时,可以通知对方,以防止数据丢失,并能“优雅”地关闭连接。
函数原型:int shutdown(SOCKET s,int how);
函数参数:s是accept的返回值;
how:表示断开发送操作(SD_SEND)1,接收操作(SD_RECEIVE)0,两者SD_BOTH2;