2017年华为软件精英挑战赛——C++总结

来源:互联网 发布:淘宝哪里有贷款 编辑:程序博客网 时间:2024/06/05 15:57
2017年华为软件精英挑战赛——语言篇
总结反思:
我是学习的C++,以前只是学习过,真正使用很少,这次比赛发现自己的短板和不足,C++内容繁多,和C有一定区别,以后不能把C++当C使用。  
1)在C++程序中,我们使用了sstream库函数,即字符串流,用来进行简化格式转化,它在编译时期就确定了需要哪些转换。<sstream>库中声明的标准类就利用了这一点,自动选择所必需的转换。而且,转换结果保存在stringstream对象的内部缓冲中。你不必担心缓冲区溢出,因为这些对象会根据需要自动分配存储空间。
 <sstream>库定义了三种类,istringstream、ostringstream和stringstream,分别用来进行流的输入、输出和输入输出操作。
注意,<sstream>使用string对象来代替字符数组。这样可以避免缓冲区溢出的危险。而且,传入参数和目标对象的类型被自动推导出来,即使使用了不正确的格式化符也没有危险。
string到int的转换
string result ="10000"
int n =0;
stream<<result;
stream>>n; //n等于10000
当我们重复多次使用同一个stringstream对象,每次转换前要使用clear()方法;多次重复使用同一个最大好处在于效率。stringstream对象的构造和析构非常消耗CPU时间。
模板使用
我们可以定义函数模板,将一个任意类型转换到特定的目标类型。如将各种数值转换成字符串
template<class T>
void to_string(string & result, const T& t)
{
ostringstream oss;//创建一个流
oss<<t;//把值传递到流
result = oss.str(); // 获取转换后的字符写入result
}
2)数组的使用
(1) 数组的定义维数必须为常数左值,不能为变量。如果需要使用变量来定义维度,需要定义动态数组,动态数组定义有两种方法new 和malloc
int* a = new int;即为将一个int类型的地址赋值给整型指针a. 
分配内存空间malloc:
 (类型说明符*) malloc (size) 功能:在内存的动态存储区中分配一块长度为"size" 字节的连续区域。函数的返回值为该区域的首地址。类型说明符表示该空间用于何种数据类型,
例如:a = (char *)malloc(char*100);
(2)数组复制
可以使用遍历,为每个元素赋值;另外使用memcpy赋值:memcpy(arr2,arr1,sizeof(arr1));
(3) 函数调用二维数组。函数在调用二维数组时可以有两种形式:1,“数据类型 形参名[][行长度]” fun(int a[][3]);2, “数据类型 (*形参名)[行长度]” fun(char  (*a)[3])
(4) 将数组全部赋值为0;memset(arr2,0,sizeof(arr2));
(3)vector的使用
虽然vector看过3,4遍,但使用过程中还是无法利用,以后再定义变量过程中能使用vector就用vector,vector方便可以添加元素,元素可以为任何值,数组就是特殊的vector。
vector定义;vector<int>  a;
vector尾部插入元素 i: a.push_back(i);
使用迭代器访问元素:
vector<int>::iterator it;for(it=a.begin();it!=a.end();it++)        cout<<*it<<endl;
插入元素:a.insert(a.begin()+i,b);
删除元素:a.erase(a.begin()+2);
向量大小:a.size();
清空:q.clear();
     3)排序问题
在数据结构中含有排序算法,C++中也存在两个排序函数,一个是C类的qsort(),另一个是sort()。
qsort的用法: qsort ( 数组名 ,元素个数,元素占用的空间(sizeof),比较函数) 
eg: qsort(a,20,sizeof(int),cmp);
sort用法:sort(start,end);输出结果是把sort按升序排序,如果是降序排序则需要自己写比较函数
sort(start,end,cmp);



0 0
原创粉丝点击