STL容器中存放不同类型实现方法
都知道C++STL容器,只要定义好之后就只能存定义的类型,不能放入别的类型。以vector容器为例,定义好只存int类型,其它类型将无法存入。vector
vecint.push_back(10);
vecint.push_back(‘s’); //错误,只能放入int类型哪容器里有没有办法可以存不同类型呢?
都知道C++STL容器,只要定义好之后就只能存定义的类型,不能放入别的类型。以vector容器为例,定义好只存int类型,其它类型将无法存入。vector
vecint.push_back(10);
vecint.push_back(‘s’); //错误,只能放入int类型哪容器里有没有办法可以存不同类型呢?
Vectors包含着一系列连续存储的元素,其行为和数组类似。访问Vector中的任意元素或从末尾添加元素都可以在常量级时间复杂度内完成,而查找特定值的元素所处的位置或是在Vector中插入元素则是线性时间复杂度。
栈(stack)在计算机科学中是限定仅在表尾进行插入或删除操作的线性表。栈是一种数据结构,它按照后进先出的原则存储数据,先进入的数据被压入栈底,最后的数据在栈顶,需要读数据的时候从栈顶开始弹出数据。栈是只能在某一端插入和删除的特殊线性表。用桶堆积物品,先堆进来的压在底下,随后一件一件往上堆。取走时,只能从上面一件一件取。读和取都在顶部进行,底部一般是不动的。栈就是一种类似桶堆积物品的数据结构,进行删除和插入的一端称栈顶,另一端称栈底。插入一般称为进栈,删除则称为退栈。 栈也称为后进先出表。
set作为一个容器也是用来存储同一数据类型的数据类型,并且能从一个数据集合中取出数据,在set中每个元素的值都唯一,而且系统能根据元素的值自动进行排序。应该注意的是set中数元素的值不能直接被改变。C++ STL中标准关联容器set, multiset, map, multimap内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也成为RB树(Red-Black Tree)。RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。
在任何时候访问或删除的元素,都是在此之前最早存入队列而至今未删除的那个元素,因此队列也是先进先出(FIFO)
C++ Priority Queues(优先队列)C++优先队列类似队列,但是在这个数据结构中的元素按照一定的断言排列有序。
多元集合(MultiSets)和集合(Sets)相像,只不过支持重复对象。
多重映射关联容器存储元素的组合形成的键值映射值,按照特定的顺序,多个元素可以有相同键值。 多重映射的键值通常用于排序和惟一地标识元素,而这个密钥关联映射值存储内容。键的类型和映射值可能有所不同,并在成员类型value_type组合在一起。
C++ Map
C++ Maps 被用作储存“关键字/值”对
get_allocator()函数返回链表的配置器。