STL之“不要”

来源:互联网 发布:网络代理服务器 编辑:程序博客网 时间:2024/05/08 10:40

      依然是《effective STL》的浓缩,记录一下使用STL时很容易就会犯的错误。

一、不要将括号带入函数的参数
int g(double pf());  等价于int g(double ()); 
因此
ifstream dataFile("ints.dat");list<int> data(istream_iterator<int>(dataFile),                 istream_iterator<int>()); 
应该换成
ifstream dataFile("ints.dat");istream_iterator<int> dataBegin(dataFile);istream_iterator<int> dataEnd;list<int> data(dataBegin, dataEnd);

二、永不建立auto_ptr的容器 
拷贝一个auto_ptr将改变它的值。因此,在任何情况下都别简历auto_ptr的容器。C++11标准中auto_ptr已经取消,不过这个建议还是得记着。
三、避免使用vector<bool>
vector<bool>是一个伪容器,只是将bool打包,并不真正地容纳bool变量。如果要记录bool变量,我们可以用deque<bool>或者bitset。
四、不要将相等和等价混淆
相等的定义基于‘==’操作符,而等价的判断是基于关联容器的排序。等价很多时候可以利用,比如创建一个不区分大小写的set。

原创粉丝点击