C++ STL的基本基本原理
STL都是在内存的堆区分配的,但是其析构也是STL帮我们做好的,不用手动去delete。
1.vector
逻辑地址连续的一片内存空间,当空间不足,重新申请新的地址空间,将原有的数据复制过去,而新的地址空间的大小C++没有规定,依赖于编译器的实现。在VC++中是原来的1.5倍,而g++中则是原来的2倍。
关于这一点可以从简单的实验来验证,vector的capacity成员函数返回vector实际申请的空间大小,可以通过不断向vector中插入100个数据,观察capacity的大小变化情况来判断数据的整张情况。代码如下:
#include<iostream>
#include<vector>
using namespace std;
int main() {
vector<int> vec;
for (int i = 0; i<100; i++) {
vec.push_back(i);
cout << "capacity is " << vec.capacity() << endl;
}
}
下图左右分别是在VS2015和g++ 4.8的运行结果图,可以发现证实了我们之前的说法:当内存空间不足时新分配的内存空间在VC++下是原来的1.5倍,在g++下是原来的2倍。


2.map
底层红黑树,有较快的查找插入删除速度,均为O(lgn)时间复杂度。另外红黑树结构决定了其不能同时插入两个key值一样的节点,而是会被直接丢弃掉,也就是插不进去。这一点可以从其是平衡二叉树的性质看出来。
C++ STL的基本基本原理的更多相关文章
- STL之序列容器deque
首先看看deque的模板声明: template <class T, class Alloc = allocator<T>> // 原本还有个参数BufSize,现在新版本 ...
- hdu 4666:Hyperspace(最远曼哈顿距离 + STL使用)
Hyperspace Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Others)Tota ...
- STL 简介,标准模板库
这篇文章是关于C++语言的一个新的扩展--标准模板库的(Standard Template Library),也叫STL. 当我第一次打算写一篇关于STL的文章的时候,我不得不承认我当时低估了这个话 ...
- STL学习二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
- stl 容器
10.1.2.2容器的分类 序列式容器(Sequence containers) 每个元素都有固定位置--取决于插入时机和地点,和元素值无关. vector.deque.list 关联式容器(Ass ...
- boost库区间range基本原理及使用实例
由 www.169it.com 搜集整理 区间的概念类似于STL中的容器概念.一个区间提供了可以访问半开放区间[first,one_past_last)中元素的迭代器,还提供了区间中的元素数量的信息. ...
- STL学习系列二:Vector容器
1.Vector容器简介 vector是将元素置于一个动态数组中加以管理的容器. vector可以随机存取元素(支持索引值直接存取, 用[]操作符或at()方法,这个等下会详讲). vector尾部添 ...
- 学习hash_map从而了解如何写stl里面的hash函数和equal或者compare函数
---恢复内容开始--- 看到同事用unordered_map了所以找个帖子学习学习 http://blog.sina.com.cn/s/blog_4c98b9600100audq.html (一)为 ...
- STL中list用法
本文以List容器为例子,介绍了STL的基本内容,从容器到迭代器,再到普通函数,而且例子丰富,通俗易懂.不失为STL的入门文章,新手不容错过! 0 前言 1 定义一个list 2 使用list的成员函 ...
随机推荐
- poj3167
这道题是一道kmp的扩展版的好题一串匹配一串很容易想到kmp,但是这里的匹配要求的是两个串的名次相同显然名次是会变的,为了方便,我们可以换一种表达对于两个等长的串的相同位置,名次相等就是在它之前比它小 ...
- Android问题:设置了requestWindowfeature(window.feature_no_title)后,为什么还要getwindow.setFlags?
//设置窗体全屏getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams. ...
- HDU-4089 Activation
http://acm.hdu.edu.cn/showproblem.php?pid=4089 Activation Time Limit: 20000/10000 MS (Java/Others) ...
- Python异常处理实例
#coding=utf-8 #---异常处理--- # 写一个自己定义的异常类 class MyInputException(Exception): def __init__(self, length ...
- 这次GDC China 2015的总结与关卡设计教程的梳理
去年关卡教程总结链接:听了GDC2014关于关卡设计的讲座的总结与自己的理解 24 号去了GDC china听了讲座,没有听unity没有听VR,听了一天关卡教程,和上次的关卡教程还是有区别的,这次的 ...
- Goole音乐搜索
本博文的主要内容有 .Goole音乐搜索的介绍 1.Goole音乐搜索的介绍 https://zh.wikipedia.org/wiki/%E8%B0%B7%E6%AD%8C%E9%9F%B3% ...
- C#中HashTable的用法示例1
一,哈希表(Hashtable)简述 在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似keyvalue的键值对,其中 ...
- java小数点的两种处理方法
1. java.text.DecimalFormat; //此方法为四舍五入 例如:DecimalFormat df = new DecimalFormat("#.0" ...
- asp.net 动态添加多附件上传.
最近有人问起动态多文件上传,想要做到类似于邮箱添加附件的效果,这个功能其实比较简单,就是往form中添加file元素.在用户选择完文件后,再添加一个file控件,由于file控件过多,视觉上不好看,所 ...
- SAE 上传根目录不存在!请尝试手动创建:./Uploads/Picture/
请在Application\Common\Conf\config.php中,添加'FILE_UPLOAD_TYPE' => 'Sae'