2019-10-13 STL模板

STL共有六大组件

1、容器 2、算法 3、迭代器 4、仿函数 6、适配器

STL容器的实现原理

STL来管理数据十分方便,省去了我们自己构建数据结构的时间.其实,STL的实现也是基于我们常见的数据结构.

序列式容器:

1: vector 向量,支持o(1)时间的快速访问;元素不够时再重新分配内存,拷贝原来数组的元素到新分配的数组中,这一点可以通过实验进行证明

#include

#include

usingnamespacestd;

int main() {

    vector vec;

    for(inti = 0; i<100; i++) {

        vec.push_back(i);

        cout << "capacity is "<< vec.capacity() << endl;

    }

}

注意事项:根据vector的插入和删除特性0(N);再插入位置和删除位置之后所有的迭代器和指针引用都会实效。



2: list  双向链表 

vector强调的是通过随机访问快速访问,而list强调的是元素的快速插入和删除

3:关联式容器

map与unordered_map  有序的

相同:两者都是键-值对的集合,关联容器的一种。两者中的元素都是pair,同时拥有实值和键值。两者都不允许有两个相同的键值(实值可以相同)。两个的外部接口调用基本一致。

不同:内部实现机理不同,即map内部实现了一个红黑树 logN的查找 插入和删除;unordered_map内部实现了一个哈希表。(两者的比较成为红黑树与哈希表的比较)。由于内部实现机理不同(底层实现)造成以下不同。

map的有序性:红黑树(非严格平衡二叉树),该结构具有自动排序的功能,因此map内部的所有元素都是有序的。

unordered_map的无序性:哈希表不会根据key值大小进行排序,存储时是根据key的hash值判断元素是否相同,因此unordered_map内部元素是无序的。

map的运行效率:红黑树可以在O(log n)时间内做查找,插入和删除,这里的n是树中元素的数目。

unordered_map的运行效率:哈希表的查找的时间复杂度可达到O(1)

unordered_map内存占用比map高

你可能感兴趣的:(2019-10-13 STL模板)