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\n", 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\n", *vit);//从头到尾打印出容器里的数据