北邮考研复试机试的一些笔记
最近在准备考研复试,复习中遇到的一些小问题记录如下:
1.vector的使用
Vector容器可以以struct为单位存储,使用vector的好处是可以方便地对数组进行处理,例如插入(push_back),删除(erase)等,但是在使用过程中还是出现了一些问题。当需要删除一个vector中符合条件的项时,使用代码如下:
//这是有问题的代码
if(x==bigVal)
{
complx.erase(complx.begin()+j);
}
这样看起来是没有问题的,但是实际上数组的长度变短了,在执行一次循环后i又自增了一次,例如数组a{1,2,3,4,5,6,7},当a[3]符合删除条件时,将a[3]删除,此时a变为{1,2,3,5,6,7},一轮循环后i变成4,此时a[4]为6,而不是原来数组里的5了。所以会出问题,因此要在删除后再i --。
if(x==bigVal)
{
complx.erase(complx.begin()+j);
j--;
}
2.字符串和数组间的转换
在c++中一种方法是使用<sstream>库:
#include<iostream>
#include<sstream>
using namespace std;
int main()
{
int a = 123345;
string str;
stringstream ss;
ss<<a;
ss>>str;
ss.clear();//如果再次使用时需要清除,防止下次调用时造成影响。
}
当然也有其他的办法,想要了解的可以在百度上找找,这里由于时间关系就介绍这一种。
3.设置小数精确度
小数的精确度的设置相对来说比较简单,学过c的都知道,但是c++上的这个知识点由于我太久没用了所以早就还给老师了,今天用到正好记录在这。
#include<iostream>
#include<iomanip>
using namespace std;
int main()
{
double a = 1.3323;
cout<<fixed<<setprecision(2)<<a<<endl;//打印的结果位1.33
//打印的double有2位小数,如果不加上fixed的话是设置4位精度,整数加上小数一共4位
//,即打印的结果为1.332
}
如果是使用c的话,就更简单了:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
double a = 1.23456;
printf("%.2f", a);//打印的结果为1.23
}
其他
很久没有用c++了,现在突然拿到手上还觉得很不习惯,例如对于字符串转换成数学表达式这个问题我也遇到过,但是感觉解决起来比较复杂,希望复试不要出这样恶心的题,如果遇到要想其他方法去解决,或者要分割成一个个小部分去计算,但是尽管只有加减乘除,还是要考虑好计算顺序的问题,防止出错,毕竟改bug是一件特别痛苦的事情。其他的以后会继续更新。