1.容器及其分类总结
分类 | 容器 |
---|
序列容器 | vector、list、deque |
容器适配器 | queue、stack、priority_queue |
关联式容器 | set、map、multiset、multimap |
- 1)vector:一种允许快速随机访问其中元素的线性序列。缺点是:在中间插入元素开销大;
- 2)list:双向链表,优点是:很方便地在任何地方插入元素;
- 3)deque(读作deck):双端队列
- push_back():插入序列尾部(适用于vector、list、deque),push_front():插入序列前端(适用于list、deque);
typedef std::vector<Shape*> Container;
typedef Container::iterator Iter;
Container shapes;
shapes.push_back(new Circle);
shapes.push_back(new Square);
shapes.push_back(new Triangle);
for (Iter i = shapes.begin(); i != shapes.end() ; ++i)
(*i) -> draw();
for (Iter j = shapes.begin(); j != shapes.end(); ++j)
{
delete *j;
}
- 注意:STL容器确保在其自身被销毁时将调用其包含的每个对象的析构函数,而指针无析构函数,因此需要用户用delete删除它们。
for (Iter j = shapes.begin(); j != shapes.end(); ++j)
delete *j;
2.迭代器
- 迭代器是为实现通用而做的抽象,它与不同类型的容器一起工作而不必了解那些容器的底层结构。
3.集合(set)
- 集合(set)仅接受每个元素的副本。由于std::set用一棵平衡树数据结构来存储元素以提供快速的查找,因此set的元素已经排好序。
- 1)如果仅为了得到一个排好序的序列,不必使用set,可以在不同的STL容器使用sort()。2)如果只想做查找操作,使用set会便利许多,其成员的 find() 比普通的find()速度快得多。