从C到C++, 这篇博客不糊弄了,认认真真写吧!很多内容来自刘汝佳的《算法竞赛入门经典》,这本紫书真的好用,感谢作者刘汝佳。
首先,需要弄清楚C与C++之间的区别,C语言相对于C++来说是更加基本的,用C写代码会比C++多写一些,自然调试的难度也会增加,C++相比于C有着更加强大的功能,当然如果我们不能够
灵活透彻的掌握C++的特性时候在必要情况下只能用基本的代码来写了,感觉用C++不是一件容易的事情,很多新的功能必须要更加了解才行。
C++与C在语法上是不同的,大部分头文件C++的是以‘c‘大头,而C是以‘.h‘结尾的,但是C++仍然支持用C的头文件来写,另外它们的输入输出有了明显的区别,cin、cout与scanf、printf相比较简洁了很多,但就是因为这种简洁(不需要声明数据类型)所以导致了速度变慢,用ios::sync_with_stdio(false)可以有效加速流,C++比C多了bool使得判断更加清晰。
C++的引用也是要说明的, 下面是代码:
#include <iostream> using namespace std; void swap2(int& a1, int& b1) { int t = a1; a1 = b1; b1 = t; } int main() { int a = 3, b = 4; swap2(a, b); cout << a << "\n" << b; return 0; }
用‘&‘符号来引用,其中引用与指针是十分相似的,具体的区别我也不太能够说明,但是引用是两个参数共同用一个地址,所以一个参数改变,另一个参数所对应的值也是会改变的,用引用有什么
好处呢?引用可以节省空间时间的浪费,因为引用也是用地址嘛,在某种条件下引用传递的数据小,自然速度也快(地址4字节),但不是任何条件下都要使用引用的。
下面就说一说结构体吧,结构体很重要,它不仅能够包含变量(成员变量)还可以包含函数(成员函数)当成员函数的名称与结构体名称相同时,我们就叫它构造函数,对于构造函数我的认识仍然不够啊!不过我知道,构造函数能够在声明结构体类型时让改变成员变量的大小,举个例子:
struct Point { int x, y; Point(int x=0; int y=0) : x(x), y(y) {} };
结构体Point里面的函数就叫结构函数,其中的x(x)与y(y)就是this->x = x this->y = y还可以写成(*this.x = x)(前面的x, y时成员变量,不是结构函数里面的东西),这就达到了修改成员函数的目的了。
说完结构体,我们说一说模板吧!首先我们给出两个代码:
int sum(int* begin, int* end) { int ans = 0; for(int *a = begin; a != end; a++) ans += *a; return ans; }
template<typename T>
T sum(T* begin, T* end) { T ans = 0; for(T *a = begin; a != end; a++) ans = ans + *a; return ans; }
int main() {
double a[] = { ...
cout << sum(a, ...
Point b[] = { ...
cout << sum(b, ...
}
其中后面的就支持任意类型的,这就是模板的强大,注意我们在第二个代码时候为什么没有用“+=”二十用了“ans = ans + *a" ? 这是由于我们没有定义Point的‘+=‘运算符,Point的’+‘运算符我没有写,
在写程序时候应该加上。 算了,我还是写一下吧!
template<typename T> Point<T> operator + (const Point<T>& A, const Point<T>& b) { return Point<T>(A.x+B.x, A.y+B.y); }
但是写程序时候还是要调整与修改的,这无关,我们继续往下说。既然模板这么强大,那么sort排序是不是运用到模板了吗,的确,sort支持很多类型,不过在写的时候还是要定义一下‘<‘运算符。
说到sort,sort就是STL,那么STL是什么呢?Standard Template Library 标准模板库,这个模板库里有很多东西,我们仅仅说一下几个重要的:set、map、vector、stack、queue、优先队列
set是集合的意思,它具有“互异性”; map就是从键到值的映射,所以也叫关联数组;与于这两个我们能够提供的操作有.count()、.insert()、.find()、.remove()等等。vector是比较灵活的不定长的”数组“,它可以支持的操作有.size()、.resize()、.push_back()、.pop_back()、.clear()等等,剩下的stack支持.top()、.pop()、.push(),queue支持push pop empty等等,优先队列要将front改为top......
这些就是C++与STL初级的部分了,剩下的东西明天在说(测试STL、大整数类)。。。
如有问题请联系我,转载请标明出处。
原文:https://www.cnblogs.com/yifeiWa/p/10353159.html