1、continue与break
提前声明:continue与break都是只能停止for、while、do...while循环内部。没有if 语句
continue 终止最近的循环中当前迭代并开始下一次迭代,只能出现在for while 循环内部。
for循环内部:1)范围for循环,用序列的下一个元素初始化循环变量。2)传统for循环,继续执行头中expression
while循环:继续判断提条件得值。
break:终止离他最近的循环并从下一条非循环语句开始。
2、类对象与类指针区别
类对象:Student s1 类指针:Student *s2
- 类指针,需要new才会分配内存,内存堆永久变量除非释放delete它;可实现多态;调用函数:->
- 类对象,实例时分配了内存,内存栈临时变量;调用函数:.
指针好处:
——第一,实现多态。
——第二,在函数调用,传指针参数。不管你的对象或结构参数多么庞大,你用指针,传过去的就是4个字节。如果用对象,参数 传递占用的资源就太大了。
3、堆和栈区别
堆栈是两种数据结构,只能在一端(称为栈顶(top))对数据项进行插入和删除。
1、空间分配区别
栈(stack) :由编译器自动分配释放管理。
堆(heap) :需要由程序员分配释放管理,通常在堆中进行动态存储分配,new delete。
2、缓存方式
栈(stack) :一级缓存,他们通常都是被调用时处于存储空间中,调用完毕立即释放;
堆(heap) :二级缓存,所以调用这些对象的速度要相对来得低一些。
3、数据结构
栈(stack) :先进后出
堆(heap) :队列优先,先进先出,堆可以被看成是一棵树,如:堆排序;
4、 运行程序计时(xx秒)
clock_t begin=clock();
...
clock_t end=clock();
double total_secs=double(end-begin)/CLOCK_PER_SEC;
cout<<"Total time taken:"<<total_secs<<"s"<<endl;
5、函数参数传递
分为两类 :值传递和引用传递,值传递只是将实参的值拷贝给形参,无法通过改变形参改变实参。
指针形参归类为值传递,拷贝指针(地址)给实参,所以可以通过指针间接访问它所指对象,修改对象的值。
通过引用形参直接传入对象,可以修改对象的值。void reset(int &i)
注意:无须修改引用形参的值最好使用常量引用bool isshorter(const string &s1, const strring &s2)
6、nullptr NULL 0 的区别
在编译器进行解释程序时,NULL会被直接解释成0,不是关键字,只是一个宏定义
nullptr在C++11中就是代表空指针,不能被转换成数字,关键字
7、容器添加、删除操作使迭代器失效
添加insert;删除erase;
迭代器的位置保持不变,但是其指向元素会发生变化。
List:重要的一条性质就是对于添加/删除操作指向容器的迭代器、指针、引用仍然有效。
Vector:方便访问,但是添加/删除使得其迭代器会失效。幸存:被删元素之前元素的迭代器、引用、指针仍有效。
deque:在首尾之外添加/删除元素会使得迭代器失效。