6、STL
- 六大组件:
-
- Container(容器):各种基本数据结构
- Iterator(迭代器): 连接containers和algorithms
- Algorithm(算法): 各种基本算法如sort、search.. 等
- Adapter(适配器):可改变containers、Iterators或Function object接口的一种组件
- Function object( 函数对象)
- Allocator(分配器):内存分配与管理
- 容器:
- 分类:
- 顺序容器:放进去在哪里,这个元素就排在哪里。array,vector,deque,list,forward_list;
- 关联容器:树,哈希表,元素是 键/值对 ,特别适合做查找。你能控制插入的内容,但一般来讲你不能控制插入的位置。set,multiset,map,multimap;
- 无序容器:哈希表;c++11里推出:元素的位置不重要,重要的是这个元素是否在这个容器里边。unordered_set,unordered_multiset,unordered_map,unordered_multimap;
- 种类:
- 分类:
#include <iostream>
#include <vector>
using namespace std;
class Test
{
public:
int m_num;
Test()
{
}
Test(int num) : m_num(num)
{
cout << "Test()" << endl;
}
~Test()
{
cout << "~Test()" << endl;
}
};
int main()
{
vector<Test> va;
va.push_back(Test(1));
cout << "1" << endl;
va.push_back(Test(2));
cout << "2" << endl;
va.push_back(Test(3));
cout << "3" << endl;
return 0;
}
结果:
Test()
~Test()
1
Test()
~Test()
~Test()
2
Test()
~Test()
~Test()
~Test()
3
~Test()
~Test()
~
-
-
-
- 特点:
- 内部是一动态数组(当空间不够时,会新开辟一段空间,将原有数据进行拷贝,在添加新的数据,再删除之前旧的空间),!!!
- 可以随机读取元素(at(),[ ] ),
- 尾部插入和移除的效率高(直接对尾部进行操作):必须要预留空间(1、构造函数 2、reserve函数)
- 中间的插入效率低(动态数组的管理方式:开辟新的空间)
- 操作方法
- 属性
- vi.capacity():查看当前的容量
- vi.reserve():只预留空间,不构造
- vi.resize():改变容器的大小
- vi.size():元素的个数
- vi.shrink_to_fit():删除多余未使用空间
- 插入
- vi.push_back():尾插导致每次都要进行拷贝
- vi.insert():插入指定的位置
- vi.emplace_back():尾插,原地构造,不用进行拷贝(??如果没有预留空间会咋样??------ 答:结果和push_back一样的动态扩容)!!!使用之前需要预留一定的空间
- 遍历
- 迭代器
- 删除
- vi.pop_back():
- vi.clear():
- vi.erase():
- 交换/赋值
- swap():
- assign():
- 属性
- 特点:
-
-