C++基础-STL

1.Qt线程共享数据的两种方式:共享内存,如全局变量,类静态成员变量,两个线程都可以访问和修改改变量;Signal/Slot机制,把数据从一个线程传递到另一个线程。

2.类的大小是1字节;指针大小

   16位:1;  32 位:4; 64 位 8;

3.STL 标准模板库  广义:算法、容器、迭代器    仿函数、适配器、空间配置器

中的哈希map   虚函数

4.虚函数的作用:简单讲即实现多态。

基类定义了虚函数,子类可以重写该函数,当子类重新定义了父类的虚函数后,父类指针根据赋给它的不同的子类指针,动态地调用属于子类的该函数,且这样的函数调用是无法在编译器期间确认的,而是在运行期确认,也叫做迟绑定。

5.http码 200成功400请求无效403禁止访问 404资源不存在500内部服务器出错

6.强制转换

7.空指针  内存指向编号为0的空间 编号0-255是系统占用的;空指针是把指针初始化的,但是不可访问。

野指针:指向一个非法内存空间,解引用或者说访问会报错。

常量指针:const int *p = &a; // p代表指针 *p解引用 

指针的值不可修改,*p=20(错误) 指向内存地址可以修改 p =&b; 

指针常量:int *const p = &a;

 指针的指向不可修改 p=&b(错误);指针的值可以改*p = 10正确;

8. 8进制前面加0 16进制加0x,

9. static 静态成员函数 静态成员变量 

类内声明,类外初始化。所有对象共享一份数据,访问方式:1通过对象进行访问  

p.m_a;2通过类名进行访问person::

静态成员函数:所有对象共享一个函数;静态 成员函数只能

10.string 是继承basic_char,包含数组长度数量,可扩展空间,每次都是二倍大小。

11.stl容器

C++基础-STL_第1张图片

(1)vector

vector容器分配的是一块连续的内存空间,每次容器的增长,并不是在原有连续 的内存空间后再进行简单的叠加,而是重新申请一块更大的新内存,并把现有容器中的元素逐个复制过去,然后销毁旧的内存。

是单端数组,可以动态扩展,即将原数据拷贝到新空间,释放原空间,支持随机访问的迭代器;

尾插push_back 尾删pop_back插入insert删除erase

插入会先执行拷贝构造函数,

优化:设置内存大小 vector.reserve(3);

resize重新制定大小 默认填充0;resize(15,1)填充1;

(2)deque容器

双端数组,可以对头尾进行删除和插入,内部有中控器,维护每个缓冲区的地址,看起来像连续的空间。

区别:vector可以随机存储元素,直接计算用公式计算出元素地址,不需要挨个查找,对头部插入删除效率低,适合对象数量变化不大;vector访问元素的速度比deque快,可以对首尾两端进行删除操作;

(3)stack  先进后出的数据结构。入栈:push 出栈:pop

栈不可遍历,只有栈顶才能被访问。

(4)queue 先进先出   入:push 出:pop

(5)list

链表是由节点组成的,包括数据域和指针域,指针域包括下一个节点的地址,最后一个指向null;

优缺点:可以快速的对任意位置进行插入和删除操作;遍历速度没有数组快;所占空间比数组大。

STL中的链表是双向循环链表,存储不是连续空间,动态分配内存,不会造成内存溢出和浪费;list的随机存取非常没有效率,时间复杂度为o(n); 但由于链表的特点,能高效地进行插入和删除。;空间(指针域)和时间(遍历)消耗都很大;

(6)set/multiset    自动排序;不允许重复/允许重复   关联式容器,底层结构是二叉树;

size()返回数目,不允许设置大小;插入insert 删除erase

pair对组成对出现,可以返回两个数据;

(7)map  一对一映射关系    insert find  

元素都是pair《key:键值起索引作用;value:实值》根据key自动排序,是二叉树实现

根据key快速找到value   map、不允许有重复key    multimap允许有重复key

  • unordered_map是使用哈希实现的,占用内存比较多,查询速度比较快,是常数时间复杂度。它内部是无序的,需要实现==操作符。

map底层是采用红黑树实现的,插入删除查询时间复杂度都是O(log(n)),它的内部是有序的,因此需要实现比较操作符(<)

12类模板 

template

C++基础-STL_第2张图片

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