C++知识点复习(四)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/perfectguyipeng/article/details/73743977

(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;


没有更多推荐了,返回首页