分享

DLT698.45驱动

 印度阿三17 2020-03-14

STL map

包含头文件:#include <map>

定义:std::map<long,CItem*> m_mapItems;

map.count(x)

返回map中key为x的元素个数,时间复杂度为O(logn)

if(!map.count(x))

  map[x]=1;

map.insert(pair<...,...>)

在map中插入,参数是pair<key.type,value.type>,返回插入地址的迭代器和是否插入成功的bool并成的pair,时间复杂度为O(log n)
PS:insert在进行插入的时候是不允许有重复的键值的,如果新插入的键值与原有的键值重复则插入无效
用法:名称.insert(pair<key的类型,value的类型>);
eg.
mp.insert(make_pair(2,3));

map[]运算符

map重载了[]运算符,map[key]返回key到value的引用,时间复杂度O(log n)
[]操作符是map最吸引人的地方。我们可以很方便地通过map[key]来得到key对应的value,还可以对map[key]进行赋值操作,改变key对应的value。
若查找的key不存在,则执行map[key]后,map会自动新建一个二元组(key,zero),并返回zero的引用。
map<string,int>mp;
for(int i=1;i<=n;i  )
{
    string s;
    int num;
    cin>>s>>num;
    mp[s]=num;
}
for(int i=1;i<=m;i  )
{
    string s;
    cin>>s;
    cout<<mp[s]<<endl;
}

std::vector<char> vec,转成字符串指针

std::vector<char> vec;
char* p = &vec[0];

字符串转成std::vector<char>

char* p="123";
std::vector<char> vec;
vec.insert(p,p 3);
//内存中16位整型,低字节在前高字节在后,证明如下:
short sh = 0x0102;//内存中低字节在前 char*p = (char*)(&sh); //p[0] = 0x02; //p[1] = 0x01;

//内存中32位整型,低字节在前高字节在后,证明如下:
long lo = 0x01020304;//内存中低字节在前
char* pLo = (char*)(&lo);
BYTE lo1 = pLo[0];//0x04
BYTE lo2 = pLo[1];//0x03
BYTE lo3 = pLo[2];//0x02
BYTE lo4 = pLo[3];//0x01
//16位整型数据转成低字节在前,高字节在后的char数组。
char ch[3] = {0};
short sh = 0x0102;
void ExchangeOrder(short sh,char*pTarget)
{
  char*p = (char*)(&sh);
pTarget[0] = p[1];
pTarget[1] = p[0];

//*(pTarget ) = p[1];
//*(pTarget ) = p[0];
//*(pTarget) = 0;
//*(pTarget  ) = char(sh >> 8);
//*(pTarget ) = char(sh);
//*(pTarget) = 0;
}
char ch[5] = {0};
short sh = 0x01020304;
void ExchangeOrder(long lo,char*pTarget)
{
  char*p = (char*)(&lo);
pTarget[0] = p[4];
pTarget[1] = p[3];
  pTarget[2] = p[2];
  pTarget[3] = p[1];
pTarget[4] = 0;

//*(pTarget ) = p[3];
//*(pTarget ) = p[2];
//*(pTarget ) = p[1];
//*(pTarget ) = p[0];
//*(pTarget ) = 0;
//*(pTarget  ) = char(sh >> 24);
//*(pTarget ) = char(sh >> 16);
//*(pTarget ) = char(sh >> 8);
//*(pTarget ) = char(sh);
//*(pTarget ) = 0;
}

char ch[5] = {0x01,0x02,0x03,0x04,0x00};转成0x01020304
CString s = "\x01\x02\x03\x04"
long l;
//l = 0x01020304
void toLong(const char* p,long& l)
{
  char ch[5] = {0};
ch[0] = *(p 3);
  ch[1] = *(p 2);
  ch[2] = *(p 1);
ch[3] = *(p);
  l = *(long*)ch;
}

//CString可以直接转成const char*,不可以直接转成char*必须用GetBuffer()和ReleaseBuffer()

//CString类型数据做为memcpy()函数的参数
CString s0 = "1234";
CString s1 ;
char* pch = s1.GetBuffer(3);//在s1的pchData中得到3个字节,用来修改。
memcpy(pch,s0,3);//这里第一个参数不能直接使用s1必须用GetBuffer()转换,第二个参数可以直接使用CString
int n = s1.GetLength();//返回s1没有使用memcpy()函数之前的长度。
s1.ReleaseBuffer(3);//参数必须小于等GetBuffer()中的参数。

//字符串转成十六进制32位整数
//CString类型做为sscanf()函数的参数
CString s0 = "01020304";
long lo;
sscanf(s0,"x",&lo); //lo = 0x01020304

//字符串转成十进制16位整数
CString s = "1234";
short sh;
sscanf(s,"%d",&sh);//sh = 1234;

//字符串转成十进制8位整数
CString s = "12";
char ch;
sscanf(s,"%d",&ch);//ch = 12;

//CString转成char*
CString s = "01020304";
char ch[10] = {0};
sscanf(s,"%s",ch); //ch[10] = {0x30,0x31,0x30,0x32,0x30,0x33,0x30,0x34,0x00,0x00}

//CString转成10进制整数
CString s = "12";
int n = atoi(s);//注意字符串的长度

//整型数转成CString
int n = 12;
CString s ;
//sprintf(s,"%d",n);//CString 不能转成char*,所以不能通过。
s.Format("d",n);

来源:https://www./content-4-658951.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多