首页 > 其他 > 详细

effective STL

时间:2018-11-28 21:39:30      阅读:171      评论:0      收藏:0      [点我收藏+]

void test()
{
//条款4 使用empty()判断空
//条款5 使用assign赋值,insert赋值
vector<int> v1(10.5), v2(20.7);
v1.clear();
//copy(v2.begin() + v2.size() / 2, v2.end(), back_inserter(v1));

v1.assign(v2.begin() + v2.size() / 2, v2.end());
v1.insert(v1.begin(), v2.begin(), v2.end());

//条款6 拷贝int文件到list中
ifstream dataFie("ints.dat");
//list<int> data(istream_iterator<int>(dataFile), istream_iterator<int>()); //什么都不会做?声明了个函数data,第一个参数是dataFile,第二个参数是 函数指针
list<int> data( (istream_iterator<int>(dataFie)), istream_iterator<int>());//用括号括住形式参数是非法的,但是括住实参是合法的


//下面3个同意义
int f(double(d)); //完整参数
int f(double d);
int f(double); //省略参数名

//下面3个同意义
int g(double(*pf)());//g带有一个函数指针为参数
int g(double pf()); //pf是一个函数指针
int g(double());//参数名省略

//条款7 容器中有指针时,new出来的对象 需要手动释放,即容器只负责释放自己的内容

vector<line_iterator *> lwp;
//for crash safe
{
//使用智能指针 shared_ptr代替指针。。。妈蛋
}
for_each(lwp.begin(), lwp.end(), DeleteObject<line_iterator>());//需要指定删除对象,当成员是非虚析构函数,一不留神 容易弄错内存泄漏
for_each(lwp.begin(), lwp.end(), DeleteObject_Init());//编译器自动推导 析构对象

//条款8 放弃auto_ptr

//条款9 删除的时候 如何选择
//Container<int> c
//连续内存容器
vector/* deque string */<int> c; //remove只是放在尾部,不删除
c.erase(remove(c.begin(), c.end(), 1963), c.end());
//链表
list<int> c2;
c2.remove(1963);

//关联容器 set multiset map multimap
set<int> s1;
s1.erase(1963);

//如果把1963 替换为函数 bool isbad(int i) 呢
c.erase(remove_if(c.begin(), c.end(), isbad), c.end());
c2.remove_if(isbad);
for (set<int>::iterator i = s1.begin(); i != s1.end(); )
{
if (isbad(*i)) {
s1.erase(i++); //删除之前i指向下一个
}
else
++i;
}

//条款10,11分配器 暂时看不懂

//条款12 stl线程安全的问题
//template <typename T>
class Lock
{
Lock(const T)
{
//lock
}
~Lock()
{
//un lock

}
};
//条款13 vector 和 string 替代数组,不使用数组
//条款14 vector 和string 根据需求提前reverse(将容量括到至少n大小),降低重新分配内存概率,或者开始分配很大,后面数据稳定后修剪掉多余的部分

//条款15 string 实现的一些方式

//条款16 C风格的api的使用,vector与string 可以很好的融入C风格api............可以作为其他的容器使用C风格api的桥梁

//条款17 使用"交换技巧"来修整过剩容量 vector<int>(aim_vector).swap(aim_vector)

//条款18 vector<bool> 使用了bit位优化位置,不支持很多容器操作,应使用bitset

//条款19 比较函数使关联容器有序, 但比较的是等价不是相等

//条款20 关联容器中存放指针是,按照指针排序,必须使用仿函数(类),来自定义比较函数,使元素有序

//条款21 标准关联容器中,相等的值永远返回false,避免插入消耗cpu,破坏有序结构

//条款22 避免原地修改set和multiset的键值

map<int, string> m;
// m.begin()->first = 10; 只读无法修改,若需要修改怎么办。。
//map 的键和值是分开的,键没法修改
set<int> k;
//k.begin(). 100;
//set 的键和值相同,但是排序方式可能是键里面的一部分,可以修改键,但是要保证不修改影响到排序的一部分

effective STL

原文:https://www.cnblogs.com/sofard/p/10034488.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!