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动态数组,增加压缩数据,是个顺序容器,
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!