笔试编程

  • IDE问题:vs2015 :bool *visited = new bool[N]; 初始化为true; 牛客/leetcode:初始化为0, 最好手动循环初始化true/false。尽量手动初始化,不要编译器默认的。
  • 二维数组作为参数传递,需要确定列数。一定将二维换成一维数组进行传递:
int *array = new int(n);  // 动态数组的定义。n为变量.之后需要手动释放,delete[] array;
int array[N]; //静态数组的dingN为常量,随着函数的调用结束自动释放。
void xxx(int *array)
void XX(int array[])

[]静态数组是在栈中申请的,而函数中的局部变量也是在栈中的,而new动态数组是在堆中的分配的,所以函数返回后,栈中的东西被自动释放,而堆中的东西如果没有delete不会自动释放。所以,函数声明的静态数组不可能通过函数返回,因为生存期的问题,函数调用完其内部变量占用的内存就被释放了。如果想通过函数返回一个数组,可以在函数中用new动态创建该数组,然后返回其首地址。

  • 笔试调试输出:vs2015运行窗口输入 确保是英文输入法(符号错误很抓狂)。\
  • 笔试输入踩坑:
    输入字符(char)情况:
读取多个字符串,中间用空格隔开,回车结束.形式如下
Asd 123 333 dcd
char input;
cin>>input // 逐字符读入,遇“空格”、“TAB”、“回车”都结束;
while (cin>>tch) {
//cin遇到结束符结束,然后进入下个循环,导致读入的字符不包括换行、空格,tab。需要设置特定条件跳出循环。
} 

为了获取空格之类,可采用

char input = cin.get(); //获取符号,不会忽略换位符\n,空格之类
while(cin.get( input ){
    if (ch == '\n')
        break; //可设置条件跳出循环;
}
等价于:
cin >> noskipws;//不会忽略 空格、回车,换行
char ch;
while (cin>>ch){
  if (ch == '\n')
    break; 
}

输入字符串(string)情况:

char a[20];
cin>>a; //接受一个字符串,遇“空格”、“TAB”、“回车”都结束
 
cin.get(a,20);//用来接收一行字符串,可以接收空格

string str;
getline(cin,str);//cin.getline()属于istream流,而getline()属于string流,是不一样的两个函数.
while(getline(cin,str){
//getline以换行停止,进入下个循环,需要手动设置特定条件跳出循环。
}

判断map中是否存在某个key

vector<string> vec; 
vector<string>::iterator iter = find(vec.begin(), vec.end(), "SZ000001");
if(iter != vec.end()){
    //vec中存在"SZ000001"
}
else{
  //没找到
} 

map<int, string> mapDemo;       
map<int, string>::iterator iter = mapDemo.find(100);
if (iter != m_Int.end()) {
  //找到了
}
else {
   //没找到
}

推荐阅读更多精彩内容