C++ 容器汇总(未完,待续)
2017-08-14 17:57
281 查看
1. Vector
Vector实际是动态数组,在堆中分配,元素连续存放,如果插入新值大于当前分配大小时,会重新分配内存。
由于vector内存空间连续,所以在中间插入或删除会造成内存块的拷贝,因此不适用于经常对中间位置元素进行添加或删除的情景;最好在vector中保存结构或者类的指针,这样可以避免是移动是产生的构造与析构的开销;
2. Map
Map是关联容器,以键值对的形式进行存储,以红黑树的结构实现,插入和删除等操作都是O(logn)。
(1) 使用说明
A.添加数据
map<int,string>maplive;
maplive.insert(pair<int,string>(102,"aclive"));
maplive.insert(map<int,string>::value_type(321,"hai"));
maplive[112]="April";//map中最简单最常用的插入添加!
B.查找数据
Find()函数返回一个迭代器指向键值为key的元素,如果没有找到就返回指向map尾部的迭代器。
map<int,string>::iterator I_it;
I_it = maplive.find(112);
If( maplive.end == I_it )//没有找到
Else
Cout<<I_it->first<<I_it->second;
C.删除数据
在删除数据时先查找要删除的数据是否存在,存在才删除。
map<int,string>::iterator I_it;
I_it = maplive.find(112);
If ( maplive.end !=I_it)
{
maplive.erase(I_it);
}
D. map中sort问题
Map中的元素自动按key升序排序,因此不能对map使用sort函数
E. map中swap用法
Map中swap不是一个容器中的元素交换,而是两个容器交换
Map<int,int> M1,M2;
M1[1] = 10;
M1[2] = 20;
M1[3] = 30;
M2[1] = 10;
M2[2] = 50;
M1.swap(M2)
3. Multimap
Multimap允许重复的键值插入容器。
4. List
List本质是双向链表,能快速的进行插入和删除操作,但是随机访问比较慢。
(1) 正向与反向迭代器
反向迭代器允许从尾到头遍历list,该功能源于list本质是双向链表,存在向前的指针。
5. Deque
Deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素。Deque被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外deque还需要维护一个存放这些数组首地址的的索引数组,基于这点设计原理,deque可以实现随机访问,但是效率比vector低很多,具体结构图如下:
向两端添加数据时,如果这一端的分段数组未满,则可以直接加入,如果分段数组已满,需要创建新的分段数组,并把该分段数组的首地址加入到索引数组中。
Vector实际是动态数组,在堆中分配,元素连续存放,如果插入新值大于当前分配大小时,会重新分配内存。
由于vector内存空间连续,所以在中间插入或删除会造成内存块的拷贝,因此不适用于经常对中间位置元素进行添加或删除的情景;最好在vector中保存结构或者类的指针,这样可以避免是移动是产生的构造与析构的开销;
2. Map
Map是关联容器,以键值对的形式进行存储,以红黑树的结构实现,插入和删除等操作都是O(logn)。
(1) 使用说明
A.添加数据
map<int,string>maplive;
maplive.insert(pair<int,string>(102,"aclive"));
maplive.insert(map<int,string>::value_type(321,"hai"));
maplive[112]="April";//map中最简单最常用的插入添加!
B.查找数据
Find()函数返回一个迭代器指向键值为key的元素,如果没有找到就返回指向map尾部的迭代器。
map<int,string>::iterator I_it;
I_it = maplive.find(112);
If( maplive.end == I_it )//没有找到
Else
Cout<<I_it->first<<I_it->second;
C.删除数据
在删除数据时先查找要删除的数据是否存在,存在才删除。
map<int,string>::iterator I_it;
I_it = maplive.find(112);
If ( maplive.end !=I_it)
{
maplive.erase(I_it);
}
D. map中sort问题
Map中的元素自动按key升序排序,因此不能对map使用sort函数
E. map中swap用法
Map中swap不是一个容器中的元素交换,而是两个容器交换
Map<int,int> M1,M2;
M1[1] = 10;
M1[2] = 20;
M1[3] = 30;
M2[1] = 10;
M2[2] = 50;
M1.swap(M2)
3. Multimap
Multimap允许重复的键值插入容器。
4. List
List本质是双向链表,能快速的进行插入和删除操作,但是随机访问比较慢。
(1) 正向与反向迭代器
反向迭代器允许从尾到头遍历list,该功能源于list本质是双向链表,存在向前的指针。
5. Deque
Deque双向队列是一种双向开口的连续线性空间,可以高效的在头尾两端插入和删除元素。Deque被表示为一个分段数组,容器中的元素分段存放在一个个大小固定的数组中,此外deque还需要维护一个存放这些数组首地址的的索引数组,基于这点设计原理,deque可以实现随机访问,但是效率比vector低很多,具体结构图如下:
向两端添加数据时,如果这一端的分段数组未满,则可以直接加入,如果分段数组已满,需要创建新的分段数组,并把该分段数组的首地址加入到索引数组中。
相关文章推荐
- C++ STL常用容器基本用法汇总
- 2017 程序设计实习之C++部分作业题汇总 - H:STL 容器与算法
- C++编程题常用容器汇总
- C++常用STL汇总(以容器为主)
- C++技术点积累(7)——STL之容器汇总
- C++编程经验汇总(未完)
- C++数据结构学习错误汇总(未完)
- c++容器
- C++ map容器 学习笔记
- C++容器之List容器初学
- 汇总收集C/C++文件读写
- tomcat+memcached+repcached(未完,待续)
- C++容器--- 顺序性容器<deque>
- c++容器操作
- C++ STL 容器自定义内存分配器
- scanf ---------未完待续
- c++之vector(容器)初始化、操作、顺序访问
- 100个windows平台C++开发错误之十二容器
- C++学习笔记-抽象容器类型
- gcc 编译c++常见错误汇总