stl概述

stl概述

stl标准模板库,基于C++(standard template library)

无需了解stl原理,便可以享受数据结构和数据算法所带来的一些特性

容器 vertor deque list map (set multiset multimap)

分为两类:

1.序列式容器 是可序群集

每个元素的都有固定的位置,元素的位置取决于插入的时机和地点,和元素的值无关(vector list deque)

元素进入该容器的开销小

2.关系式容器 是已序群集

元素的位置取决于元素的值和特定的排序规律(set map multiset multimap)

元素进入该容器的开销大

对比

元素进入容器,序列式优于关系式

搜索元素时,关系式优于序列式

二分查找(折半查找)

速度最快

STL容器必须满足以下条件:

1.容器进行元素的插入操作,内部实现的是拷贝操作,因此STL容器内的每一个元素都必须能够被拷贝

2.所有元素形成次序,多次遍历每个元素时的次序总是相同的

3.一般而言,各项操作并非绝对安全

通用性函数

size empty 关系判断 swap insert erase clear pushback popback

迭代器:可以遍历stl容器内全部或部分元素的一个对象,对象行为理解为指针(智能指针)

可以把他当成一个函数 一个指针

vector

他是一个容器 动态数组(c++标准 并没有要求必须用动态数组来实现vector,只岁规定了相应的条件和操作复杂度) 栈 链式栈(链表) 顺序栈(数组)

只要知道位置,很方便直接存取这个位置的元素

在尾部进行插入和删除时,性能是比较高,在前端和中端进行插入和删除,性能相对比较差,要做大量移位

容器的大小可以变化,如果大小发送生变化,可能会导致内存重新分配,重新分配可能会导致内存泄露或内存溢出。

c语言是编译性语言

java是解释性语言

下面是vector的增删查改

 1     vector<int> v;
 2 
 3     for (int i = 0; i < 10; i++){
 4         v.push_back(i + 1);//分配空间的事情,赋值的事情
 5         for (int i = 0; i < 10; i++){
 6             printf("%d
", v[i]);
 7         }
 8     }
 9     vector<int>::iterator vit = v.begin();//vector的迭代器
10 
11     v.insert(vit + 2, 100);//索引到第二个数的位置插入100
12     vit = vit + 3;//vit索引到第三位
13     v.erase(vit);//删除第三位上的数数据
14 
15     for (vit = v.begin(); vit != v.end(); ++vit)
16         printf("%d
", *vit);//从头到尾打印出容器里的数据
原文地址:https://www.cnblogs.com/liugangjiayou/p/11402657.html