OJ 注意点及知识点总结

1.头文件

#include<vector>    //vector容器

#include<map>       //map容器

#include<algorithm>       //sort() 函数需要加

 

2.宏定义

#define OK 0

#defien ERR 1

或者定义成其他。

 

3.字符串问题

入参有字符指针,一定要检查是不是NULL

传入的Output指针,如果没有特别说明要自己分配空间的话,也要检查是否NULL

不要改变传入的字符串,需要改变的话,可以自己定义一个新的,然后memcpy过来处理

例如:

char* newstr = (char*)malloc((strlen(pInputStr)+1) * sizeof (char));        //注意 +1

memset(newstr, 0, (strlen(pInputStr)+1) * sizeof (char));                       //malloc 后一定要 memset   //最后一个参数可以从上面这句复制过来

memcpy(newstr, pInputStr, strlen(pInputStr));

 

传参为char* ,也可以通过string处理:

string str_c, str_e;

str_c = pStrChinese;                                       //可以这样赋值
str_e = pStrEnglish;

 插一句: string有一个方法,c_str(),可以把string类型转换成 C 语言中的字符串。

若要把string类型的值赋给 char*(已分配空间),则要memecpy:

memcpy(pOutputStr, str_e.c_str(), str_e.length);

 

4.map

map容器就像是哈希表,就像是python中的字典,就像是javascript中的对象,都是键值对。

创建: map<int, int>  transmap;                    //定义了一个变量transmap,是个map容器,键值都是int类型

创建迭代器: map<int, int>::iterator it;              //it就是迭代器了

添加:最简单的办法就是 transmap[key] = value;

查找:transmap.find(value);                           //find函数返回的是索引值,如果没找到就返回最后的索引值的后一个,也就是transmap.end()的值

遍历:可以通过迭代器:

   for(it = transmap.begin(); it != tansmap.end(); it++){

     cout<<it->second<<" ";                //迭代器的第一值是键,第二个是值,所以 it->second 是找到的值,也可以(*it).second

   }

删除键值对:.erase(索引值)

  it = transmap.find(value);

  transmap.erase(it);

  注意遍历删除时,要在删除前将索引值+1,如:

  for(it = transmap.begin(); it != transmap.end();){

    cout<<it->fitst<<":"<<it->second<<endl;

    transmap.erase(it++);

  }

清除map容器: map.clear();

排序:map中的键值对是按照 键 从小到大排的,map不支持sort函数;

你可能感兴趣的:(OJ 注意点及知识点总结)