Think in in C++[vol2]【7】通用容器

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);
//Container装的是指向Shape类型对象的地址
	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();
	//Sometime later
	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()速度快得多。

猜你喜欢

转载自blog.csdn.net/qq_43118572/article/details/113812063