欢迎来到天天文库
浏览记录
ID:56447017
大小:43.00 KB
页数:18页
时间:2020-06-18
《STL 初级使用培训.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、STL(standardtemplatelibrary)初级使用培训STL中有下面几种对象:容器(containers)迭代器(iterators)算法(algorithm)函数对象(functor)空间配置器(allocator)适配器(adapter)容器1、容器是什么容器就是容纳各种类型数据的一个集合对象,目前stl中的容器对象只能容纳同一类型的数据。2、有哪些类型的容器(红色为顺序容器、蓝色为关联容器)vector(向量:其实就是可变长数组)deque(双端队列)-》可适配为stack(堆栈)、queue(队列)priority_queue(优先队列)list
2、(链表:内部实现是双向链表)set(集合)multiset(多重集合)map(图:内部实现是红黑树)multimap(多重图)VectorVector的模型(向量)常用的接口函数:begin():返回向量第一个元素的位置游标对象(iterator)end():返回向量最后一个元素的位置游标对象(iterator)rbegin():反向返回向量第一个元素的位置游标对象(iterator)rend():反向返回向量最后一个元素的位置游标对象(iterator)push_back():将元素推入(push)到前一个元素的后面(back)resize():重新设置容器容量(放
3、元素的个数即数组大小)clear():释放数组中的元素和释放内存empty():判断是否为空容器(没有任何元素在其中)insert():在指定位置插入元素erase():删除游标对象所在位置的元素size():获得容器内元素个数reserve():预保留容器内元素个数(可以减少内存重新分配)Vector常用的代码写法1、将元素放入vectorstd::vectorvctXXX;for(inti=0;i<10;i++)vctXXX.push_back(i);vctXXX.insert(vctXXX.begin()+2,13);2、取出元素//按照索引方式取元素
4、for(size_ti=0;i::Iteratoriter=vctXXX.begin();for(;iter!=vctXXX.end();iter++)Tele=*iter;Vector常用的代码写法3、删除元素对于容器内对象是指针的,且你想删掉容器内对象的,调用下面的代码while(!vctXXX.empty()){vctXXX.erase(vctXXX.begin());}最后调用clear方法vctXXX.clear();4、提高插入元素效率的办
5、法比方说你大概知道这个容器内元素个数的范围,比如200-400个,你可以调用下面代码vctXXX.reserve(400);这样当容器内元素个数小于400时,容器不会重新分配内存。Vector需要注意的地方1:vector是容器,因此最好自己写代码来释放容器中的数据,不要期待vector析构函数来做这件事。虽然可以这样做。2:如果要频繁重新全部更换vector的数据,在处理之前一定要调用一下clear方法。3:对于反向处理vector的数据,最好使用rbegin和rend方式处理。4:对于大结构体和对象(结构体和对象中成员很多,且占用内存大),建议将其的指针放入容器,
6、而不要把对象直接放入容器。因为当容器中元素个数超过容器容量后,容器会重新分配内存,这个时候会调用对象的拷贝构造函数、析构函数(释放),并移动内存。如果对象很大,重新构造和析构开销很大。5、stl中的vector本身没有加锁保护,多线程编程的时候对其操作需要注意加锁保护。listlist的模型(双向链表)常用的接口函数:begin():返回第一个元素的位置游标对象(iterator)end():返回最后一个元素的位置游标对象(iterator)rbegin():反向返回第一个元素的位置游标对象(iterator)rend():反向返回最后一个元素的位置游标对象(iter
7、ator)clear():释放内存empty():判断是否为空容器(没有任何元素在其中)insert():在当前位置插入元素erase();删除游标位置的元素remove():删除指定的元素size():获得容器内元素个数List常用的代码写法1、将元素放入liststd::listlistXXX;for(inti=0;i<10;i++)listXXX.insert(i);2、取出元素//通过游标方式取元素std::list::Iteratoriter=listXXX.begin();for(;iter!=listXXX.end();
此文档下载收益归作者所有