这篇文章主要介绍“C++容器底层数据结构介绍”,在日常操作中,相信很多人在C++容器底层数据结构介绍问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”C++容器底层数据结构介绍”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
金口河网站制作公司哪家好,找创新互联公司!从网页设计、网站建设、微信开发、APP开发、响应式网站设计等网站项目制作,到程序开发,运营维护。创新互联公司于2013年成立到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联公司。
内置数组:
int arr[10][10]; memset(arr,0,10*10*sizeof(int)); //初始化 int tmp[10][10]; memcpy(arr, tmp, 10 * 10 * sizeof(int));//拷贝
void *memcpy(void *destin, void *source, unsigned n); //源*目的内存覆盖问题
memcpy 函数用于 把资源内存(src所指向的内存区域) 拷贝到目标内存(dest所指向的内存区域);拷贝多少个?有一个size变量控制拷贝的字节数;
序列容器:array、vector 、deque、 list 、 forward_list
array
vector
deque
list
forward list
string:与vector相似的容器,但专门用于保存字符。随机访问快。在尾部插入/删除速度快。
所有序列容器的函数成员 max_size() 都会返回它能存储的元素个数的最大值。这通常是一个很大的值,一般是 2^32 -1。
Stack
The standard container classes vector, deque and list fulfill these requirements. By default, if no container class is specified for a particular stack class instantiation, the standard container deque is used.
默认使用deque
而不是vector
作为底层容器
set、map、multimap、unordered_set、unordered_map、unordered_multimap的底层数据结构,以及几种map容器如何选择?
set、map、multimap基于红黑树,是非严格平衡二叉搜索树,元素有序,且插入、删除效率高但空间占用率高
unordered_set、unordered_map、unordered_multimap基于哈希表,元素无序,查找效率高。
内存占有率的问题就转化成红黑树 VS hash表 , 还是unorder_map占用的内存要高,哈希表的建立比较耗费时间。
map
map.clear()只是把map清空了,但是内存没有释放,如果要释放内存不止是要clear()掉,还要和一个空的map来进行swap,将内存释放。
注意map中如果元素不是基本类型,也要进行内存释放,如指针,vector要尤其注意,否则map占的内存太大,会造成程序崩溃。
vector
array: 固定长度的数组,使用栈(静态内存分配),因此效率与数组相同。
使用fill方法实现了数据填充。
使用size方法取得数组的大小。
虽然at(i)方法实现带有越界检查的读写。
写入速度的比较结果:内置数组的速度最快,vector容器次之,array容器最慢???
拷贝速度:https://blog.csdn.net/qq_35976351/article/details/82940121
拷贝:/* 未开优化: array=466ms vector=7923ms memcpy=198ms */ /* -O3优化,最高速度: array=0ms vector=453ms memcpy=0ms */
迭代器iterator
在STL中,使用迭代器(内置类型 iterator)给出数据在表中的位置
正向迭代器:
containerType::iterator itr
;常量正向迭代器(不可更改):
containerType::const_iterator itr
;反向迭代器:
containerType::reverse_iterator itr
;常量反向迭代器:
containerType::const_reverse_iterator itr
;
常用的需要使用迭代器的容器方法:
iterator insert(iterator pos, const Object & x)
:添加x到表中迭代器pos所指向的位置之前的位置。对1ist是常量时间操作,对vector则不是。返回值是一个指向插入项位置的迭代器iterator erase(iterator pos)
:删除迭代器所给出位置的对象。对1ist是常量时间操作,对vector不是。返回值是调用之前pos所指向元素的下一个元素的位置。这个操作使pos失效。pos不再有用,因为它所指向的容器变量已经被删除了iterator erase(iterator start, iterator end)
:删除所有的从位置start开始直到位置end(但是不包括end)的所有元素
到此,关于“C++容器底层数据结构介绍”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
分享题目:C++容器底层数据结构介绍
分享地址:http://lswzjz.com/article/ijjjjo.html