C++需要注意点

list 链表
vector 数组
set 二叉树,仅存储Key
map 二叉树,Key-Value

vector是序列式容器而set是关联式容器。set包含0个或多个不重复不排序的元素。也就是说set能够保证它里面所有的元素都是不重复的。另外对set容器进行插入时可以
指定插入位置或者不指定插入位置。如insert(v.begin(),1),也可以直接用insert(1)。还有一点是set对一些操作符没有进行重载,如<

//for(vp = v.begin();vp < v.end(); vp++)  //如果使用这句会出错,因为set容器对<没有重载  
  v.insert(v.begin(),1);  //vector insert(1)不指定插入位置,会出错,但是SET不会出错  

vector是可以快速地在最后添加删除元素,并可以快速地访问任意元素
list是可以快速地在所有地方添加删除元素,但是只能快速地访问最开始与最后的元素
deque在开始和最后添加元素都一样快,并提供了随机访问方法,像vector一样使用[]访问任意元素,但是随机访问速度比不上vector快,因为它要内部处理堆跳转
deque也有保留空间.另外,由于deque不要求连续空间,所以可以保存的元素比vector更大,这点也要注意一下.还有就是在前面和后面添加元素时都不需要移动其它块的元素,
所以性能也很高。  
 
1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque。

void function()const; //常成员函数, 它不改变对象的成员变量.                        


//也不能调用类中任何非const成员函数。


常量对象调用非常量函数时将会产生语法错误


C++中,是否为const分配空间要看具体情况.如果加上关键字extern或者取const变量地址,则编译器就要为const分配存储空间.
不能在类声明中初始化const数据成员
const数据成员的初始化只能在类的构造函数的初始化表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现。
枚举常量不会占用对象的存储空间,他们在编译时被全部求值
也就是说:在c++ 中const 对象默认为文件的局部变量。与其他变量不同,除非特别说明,在全局作用域声明的 const 变量是定义该对象的文件的局部变量。
此变量只存在于那个文件中,不能被其他文件访问。通过指定 const 变更为 extern,就可以在整个程序中访问 const 对象:


 在C语言中: const int size; 这个语句是正确的,因为它被C编译器看作一个声明,指明在别的地方分配存储空间.但在C++中这样写是不正确的.C++中const默认是内部连接,
 如果想在C++中达到以上的效果,必须要用extern关键字.即C++中,const默认使用内部连接.而C中使用外部连接.


map 和 set容器中,一个键只能对应一个实例 

map使用下标有一个危险的副作用,如果该键不在map容器中,那么下标操作会插入一个具有改键的新元素,其关联的值为0;
map容器提供了两个操作,count和find用于检查改键是否存在而不会插入该键
对于map对象,count成员的返回值只能是1和0;
erase的返回值也是1和0,1表示删除成功,0表示删除失败,该值在MAP中不存在


删除操作有三种形式,删除键对应的那个值,删除迭代器指向的元素,删除迭代器指向的范围



出于某些原因,标准库类型不允许做赋值或是复制操作,IO对象不可复制或是赋值,
1》由于流对象不能赋值,因此不能存储在Vector里面,
2》形参或返回类型也不能为流类型

为了防止复制,类必须显式的声明其复制构造函数为private,然而,类的友元和成员仍然可以进行复制,如果想要完全禁止,就可以声明一个(private)
但不对其定义

getline函数将istream做为返回值,getline函数返回时丢弃换行符,换行符将不会存储在string对象中

非const变量默认为extern,而const变量默认为局部变量,要使得const变量能够在其他文件中访问,必须显式的指定extern

枚举成员是常量,不可用int赋值,枚举类型的对象的初始化或赋值,只能通过枚举成员或同一枚举类型的其他对象来进行
枚举成员的值可以是不唯一的,不能改变枚举成员的值,因为其本身是一个常量表达式


管理指针成员有两种办法
1.定义智能指针类
个行为类似指针但也提供其他功能的类。智能指针的一个通用形式接受指向动态分配对象的指针并负责删除掉该对象,用户分配对象,
但由智能指针类删除掉它。智能指针类需要实现复制控制成员来管理指向共享对象的指针。只有在撤销了指向共享对象的最后一个智能指针后,
才能删除该共享对象。使用计数是实现智能指针类最常用的方式。




2.定义值类型
在构造函数中为指针分配内存,在析构函数中释放内存,在赋值操作中改变指针所指内容的值而不是指针的值。


遇到右花括弧的时候,运行析构函数,动态分配的对象只有在指向该对象的指针被删除时候才撤销,
当对象的引用或指针超出作用域时候,不会运行析构函数。只有删除指向动态分配对象的指针或是实际对象(不是引用)超出作用域时候,才会运行析构函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值