C++八股学习心得.9

1.解释C++中静态函数和静态变量

(1)类静态数据成员在编译时创建并初始化:在该类的任何对象建立之前就存在,不属于任何对象,而非静态类成员变量则是属于对象所有的。类静态数据成员只有一个拷贝,为所有此类的对象所共享。

(2)类静态成员函数属于整个类,不属于某个对象,由该类所有对象共享。

1、static 成员变量实现了同类对象间信息共享。

2、static 成员类外存储,求类大小,并不包含在内。

3、static 成员是命名空间属于类的全局变量,存储在 data 区的rw段

4、static 成员只能类外初始化

5、可以通过类名访问(无对象生成时亦可),也可以通过对象访问。

2.说下你对内存的了解

1.栈 - 由编译器自动分配释放

2.堆 - 一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收

3.全局区(静态区)全局变量和静态变量的存储是放在一块的初始化的全局变量和静态变量在一块区域,未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。- 程序结束释放

4.另外还有一个专门放常量的地方。- 程序结束释放

5 程序代码区,存放2进制代码。

函数体中定义的变量通常是在栈上,用malloc, calloc, realloc等分配内存的函数分配得到的就是在堆上。在所有函数体外定义的是全局量加了static修饰符后不管在哪里都存放在全局区(静态区),在所有函数体外定义的static变量表示在该文件中有效,不能extern到别的文件用在函数体内定义的static表示只在该函数体内有效。另外,函数中的"adgfdf"这样的字符串存放在常量区。

3.C++ map用法

C++ 中 map 提供的是一种键值对容器,里面的数据都是成对出现的,

Map的使用

需要导入头文件

#include <map> // STL头文件没有扩展名.h

map 对象是一个模版类,需要关键字和存储对象两个模版参数

 std::map<int , std::string> person;

map 中元素的查找:

   find() 函数返回一个迭代器指向键值为 key 的元素,如果没找到就返回指向 map 尾部的迭代器。

map 中 swap 的用法:

  Map 中的 swap 不是一个容器中的元素交换,而是两个容器交换

map 的 sort 问题:

  Map 中的元素是自动按 key 升序排序,所以不能对 map 用 sort 函数:

map 的基本操作函数:

    C++ Maps 是一种关联式容器,包含“关键字/值”对

    begin()                  返回指向 map 头部的迭代器

    clear()                 删除所有元素

    count()                  返回指定元素出现的次数

    empty()                 如果 map 为空则返回 true

    end()                     返回指向 map 末尾的迭代器

    equal_range()        返回特殊条目的迭代器对

    erase()                   删除一个元素

    find()                     查找一个元素

    get_allocator()      返回map的配置器

    insert()                  插入元素

    key_comp()          返回比较元素key的函数

    lower_bound()     返回键值>=给定元素的第一个位置

    max_size()            返回可以容纳的最大元素个数

    rbegin()                返回一个指向map尾部的逆向迭代器

    rend()                   返回一个指向map头部的逆向迭代器

    size()                    返回map中元素的个数

    swap()                 交换两个map

    upper_bound()    返回键值>给定元素的第一个位置

    value_comp()       返回比较元素value的函数

 4.C++ vector使用方法

C++ 中,vector 是一个十分有用的容器。它能够像容器一样存放各种类型的对象,简单地说,vector是一个能够存放任意类型的动态数组,能够增加和压缩数据。vector 是同一种类型的对象的集合,每个对象都有一个对应的整数索引值。和 string 对象一样,标准库将负责管理与存储元素相关的内存。vector 称为容器,是因为它可以包含其他对象。一个容器中的所有对象都必须是同一种类型的。

向量(vector)是一个封装了动态大小数组的顺序容器(Sequence Container)。跟任意其它类型容器一样,它能够存放各种类型的对象。可以简单的认为,向量是一个能够存放任意类型的动态数组。

容器特性

1.顺序序列

顺序容器中的元素按照严格的线性顺序排序。可以通过元素在序列中的位置访问对应的元素。

2.动态数组

支持对序列中的任意元素进行快速直接访问,甚至可以通过指针算述进行该操作。操供了在序列末尾相对快速地添加/删除元素的操作。

3.能够感知内存分配器的(Allocator-aware)

容器使用一个内存分配器对象来动态地处理它的存储需求。

vector 作为函数的参数或者返回值时,需要注意它的写法:

double Distance(vector<int>&a, vector<int>&b)

总结: 

类静态数据成员创建并初始化,创建之前就存在,不属于任何对象,非静态类成员变量是对象所属,静态成员函数属于整个类,不属于对象,所有对象共享,static成员实现了同类信息共享,存储在数据区读写段,类外初始化,类名和对象都可以访问

栈,存放局部变量和形参,系统自动分配和释放,堆程序员动态分配内存,需手动释放,全局区(静态区)初始化和未初始化的全局变量和静态变量在两个不同位置存放,常量放在一个区域,二进制代码放在代码区,函数体内栈,malloc和new都是在堆,函数体外static变量都是放在全局区,该文件有效,局部变量static是函数体有效

Map键值对容器,find函数查找key未找到返回迭代器尾部,swap两个容器互换,map自动排序,count()查看元素出现次数

Vector动态数组,增加压缩数据,是个顺序容器,

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值