C++之STL初识

6、STL

  1. 六大组件:
    • Container(容器):各种基本数据结构
    • Iterator(迭代器): 连接containers和algorithms
    • Algorithm(算法): 各种基本算法如sort、search.. 等
    • Adapter(适配器):可改变containers、Iterators或Function object接口的一种组件
    • Function object( 函数对象)
    • Allocator(分配器):内存分配与管理
  1. 容器:
    1. 分类:
      1. 顺序容器:放进去在哪里,这个元素就排在哪里。array,vector,deque,list,forward_list;
      2. 关联容器:树,哈希表,元素是 键/值对 ,特别适合做查找。你能控制插入的内容,但一般来讲你不能控制插入的位置。set,multiset,map,multimap;
      3. 无序容器:哈希表;c++11里推出:元素的位置不重要,重要的是这个元素是否在这个容器里边。unordered_set,unordered_multiset,unordered_map,unordered_multimap;
    2. 种类:
      • vector:
        • C++之STL初识_第1张图片
#include 
#include 


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 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():

你可能感兴趣的:(c++)