ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

C++的vector、list、map和unordered_map用法及解读

C++的vector、list、map和unordered_map用法及解读 是向量类型可以容纳许多类型的数据因此也被称为容器。相当于一个数组在内存中分配一块连续的内存空间进行存储可以不指定vector的大小。STL内部实现时首先分配一个非常大的内存空间预备进行存储若超过此分配的空间时再整体重新分配一块内存存储。(头文件#include)1234567891011121314151617181920212223242526//定义长度为10整型元素的向量vectorint a(10);//10个初始化为1的向量vectorint a(10,1);//用向量b给向量a赋值a的值完全等价于b的值vectorint a(b);//将向量b的开始位置长度为3的元素赋值给avectorint a(b.begin(),b.begin3);//使用数组赋值intb[7]{1,2,3,4,5,6,7}vectorint a(b,b7);//添加元素vectorint a;a.push_back(0);//添加元素//从现有向量中选择性添加inta[6]{1,2,3,4,5,6};vectorintb;vectorintc(a,a4);for(vectorint::iterator itc.begin();itc.end();it){b.push_back(*it);}//从向量中读取元素inta[6]{1,2,3,4,5,6};vectorintb(a,a4);for(inti0;ib.size()-1;i){coutb[i]endl;}优点不指定内存大小的数组可以像数组那样操作也可以对数组进行动态操作通常体现在push_back()(添加元素)和pop_back()(移除元素)随机访问方便可以[]和vector.at()节省空间缺点在内部执行插入或删除操作效率低push和pop只能在vector尾部操作当添加数据超过vector默认分配的大小时要进行整体的重新分配、拷贝和释放list是STL实现的双向链表每个节点都包含信息块info、前驱指针Pre和后驱指针Post。可以不用指定内存大小使用不连续的内存空间进行存储头文件#include123456789101112131415//初始化listint list1;//创建空listlistint list2(5);//创建长度为5的listlistint list3(3,2);//长度为3初始化为2的listlistint list4(list2);//使用list2初始化listint list5(list2.begin(),list2.end());//常用函数list2.assign(8,1);//赋值list2.back();//返回最后一个元素list2.begin();//返回指向第一个元素的迭代器list2.front();//返回第一个元素list2.pop_back();//删除最后一个元素list2.pop_front();//删除第一个元素list2.push_back();//在list的末尾添加一个元素list2.push_front();//在list的头部添加一个元素优点不使用连续内存完成动态操作。进行插入和删除操作方便可以在两端进行push、pop缺点不能通过下标随机访问不连续存储占用内存多map是STL的一个关联容器包含“关键字/值”对提供一对一的hash。map以模板(泛型)方式实现可以存储任意类型的数据包括自定义的数据类型。map主要用于资料一对一映射的情况map内部的实现自建一颗红黑树这棵树具有对数据自动排序的功能。(头文件#include)12345678910111213141516//插入元素mapint,string Map;Map.insert(pairint,string(1,first));Map.insert(mapint,string::value_type(2,value));//插入value_type数据//查找元素itMap.find(first);if(it!Map.end())coutit-second;//返回数据的位置elsecout没找到;//删除和清空元素Map.erase(first);//删除返回1否则返回0Map.erase(Map.begin(),Map.end());//使用迭代器清空整个mapMap.clear();//清空Map//map大小Map.size();优点有序性简化操作map的查找、删除、增加等操作时间复杂度稳定-logn缺点查找、删除等操作比较慢空间占有率高unordered_map无序映射关联容器基于hash表实现123456789101112131415161718192021//声明初始化unordered_mapstring,int UnMap;unordered_mapstring,int Map{{1,1},{2,2}}//插入操作UnMap.insert(Map);/复制插入UnMap.insert(make_pairstring,int(3,3));//移动插入UnMap.insert(Map.begin(),Map.end());//范围插入UnMap[4]4;//数组形式插入//查找操作unordered_mapstring,int::const_iterator itUnMap.find(1);if(it!UnMap.end())coutit-first;elsecout没有找到;//修改操作UnMap[2]5;UnMap.at(1)6;//清除操作UnMap.erase(UnMap.begin());//通过位置清空元素UnMap.erase(2);//通过键值清除元素UnMap.clear();//清空操作优点查找速度快缺点哈希表的建立比较耗费时间总结以上为个人经验希望能给大家一个参考
返回列表