c++基础
别问!问就是菜
坚持坚持坚持!干!
展开
-
二维数组逐行和逐列遍历效率
按行遍历效率高首先数组在内存中是按行存储的,按行遍历时可以从数组首元素地址一直走下去,就可以遍历完整个数组,而按列遍历则需要每次指向每一列的第n行元素;但是指针寻址很快,所以并不会有明显的区别;那么到底按行遍历比按列遍历效率高在哪里呢?1:CPU高速缓存CPU高速缓存是用于减少处理器访问内存所需平均时间的部件。在金字塔存储体系中位于第二层,仅次于CPU寄存器;其容量远小于内存,但是速度却可以接近处理器的频率。当处理器发出访问请求时,会先查看缓存内是否有请求数据,如果存在(命中),则直接返回数转载 2020-10-11 19:40:30 · 1813 阅读 · 0 评论 -
c++ 继承详细总结
c++中的继承1:继承的概念及定义a.继承的概念继承(inheritance)机制是面向对象程序设计使代码可以复用的最重要的手段,它允许程序员在保持原有类特 性的基础上进行扩展,增加功能,这样产生新的类,称派生类。继承呈现了面向对象程序设计的层次结构, 体现了由简单到复杂的认知过程。以前我们接触的复用都是函数复用,继承是类设计层次的复用。b.继承定义定义格式:class Student : public Person{public: int _id; int _major;}继承关原创 2020-08-14 23:16:42 · 243 阅读 · 1 评论 -
C++ list与vector的区别总结
vectorvector和数组类似,它拥有一段动态连续的内存空间,因此它能非常好的支持随机存取(即使用[]操作符访问其中的元素),但由于它的内存空间是连续的,所以在中间进行插入和删除会造成内存块的拷贝(复杂度是O(n)),另外,当该数组后的内存空间不够时,需要重新申请一块足够大的内存并进行内存的拷贝。这些都大大影响了vector的效率。vector介绍与实现vector模拟实现listlist是由数据结构中的双向链表实现的,因此它的内存空间可以是不连续的。因此只能通过指针来进行数据的访问,这原创 2020-08-07 11:55:03 · 647 阅读 · 0 评论 -
C++ list深度刨析及模拟实现
1.list的介绍及使用1:list的介绍官方文档1:list是可以在常数范围内任意位置插入和删除的序列式容器,并且该容器可以前后双向迭代;2:list的底层是双向链表结构,双向链表的每个节点存储在互不相关的独立节点中,在节点中通过指针指向其前一个和后一个元素;3:list与forward_list非常相似:最主要的是forward_list是单链表,只能朝前迭代,以让其更简单高效;4:与其他序列式容器相比(array,vector,deque),list通常在任意位置进行插入,移除圆度的执行原创 2020-08-07 11:31:34 · 298 阅读 · 1 评论 -
C++vector深度刨析及实现
vector介绍及使用1:vector介绍官方文档1:vector是可变大小数组的序列容器2:就像数组一样,vector也采用连续存储空间来存储元素。也就意味着可以采用下标的方式对vector 的元素进行访问,和数组一样高效。但是又不像数组,它的大小是 可以动态改变的,而且它的大小会被容器自动处理。3:本质上讲,vector使用动态分配数组来存储元素。当新元素插入时,这个数组需要被重新分配大小来增加存储空间。其做法是,分配一个新的数组,然后将全部元素移动到这个数组当中去。就时间而言,这是一个相对原创 2020-08-05 23:55:48 · 375 阅读 · 0 评论 -
c++string类实现(现代写法与传统写法)
标准库中的string类:string是表示字符串的类;该类的接口与常规容器的接口基本相同,再添加了一些专门操作string的常规操作;string在底层实际是:basic_string模板类的别名:typedef basic_string<char,char_traits,allocator>string;不能操作多字节或者变长的序列;string类的常用构造函数string() 构造空的string类对象string(const char* s) 用C风格原创 2020-08-03 10:17:30 · 351 阅读 · 0 评论 -
c++指针与迭代器的区别
这是我感觉总结的很好的一篇回答:知乎原回答链接如果只讨论 STL container 类的 iterator,它们其实都是一种泛型指针。C风格指针是属于 iterator 的一种的。iterator 根据功能做了更细的划分,STL 中的 iterator 分成了五类。我觉得它们的区别:在范围上,pointer 属于 iterator 的一种(random access iterator)在功能上,iterator 有着比pointer 更细的划分并对应能力不同的功能(重载不同的运算符 )在行为上转载 2020-07-31 23:22:32 · 1101 阅读 · 1 评论 -
C&C++内存管理
c&c++内存分布先来看下面的代码:int globalVar = 1; static int staticGlobalVar = 1; void Test() { static int staticVar = 1; int localVar = 1; int num1[10] = {1, 2, 3, 4}; char char2[] = "abcd"; char* pChar3 = "abcd"; int* ptr1 = (int*)mall原创 2020-07-31 21:06:23 · 142 阅读 · 1 评论 -
c++类和对象详细总结
类和对象空类空类并不是什么都没有的,任何一个类在我们不写的情况下,都会自动生成六个默认成员函数:构造函数:主要内容不是开空间创建对象,而是初始化对象构造函数是一个特殊的成员函数,名字与类名相同,创建类类型对象时由编译器自动调用,保证每个数据成员 都有 一个合适的初始值,并且在对象的生命周期内只调用一次特性:(1):函数名与类名相同,无返回值,可以重载,对象实例化时编译器自动调用;(2):有无参构造和带参构造;(3):只有当类中没有任何构造函数时,编译器才会自动生成一个无参构造,如果类中已原创 2020-07-29 20:15:08 · 233 阅读 · 0 评论 -
c++类的大小
1:类大小与什么有关系?a:有关因素:普通成员变量;虚函数;继承(单一继承,多重继承,重复继承,虚拟继承)b:无关因素:静态成员变量;静态成员函数;普通成员函数为什么静态成员变量,静态成员函数和普通成员函数是无关因素?a:对于成员函数来说,函数名本身就指明了函数是属于哪个类的(连参数类型都有),因此,编译器在编译代码时,可以直接调用该类的成员函数,而不需要类本身提供任何信息。b: 对于静态成员变量来说, 静态成员变量占用全局的内存. 和全局变量分配的内存在同一个区域里面.,而sizeof()原创 2020-07-07 03:01:34 · 257 阅读 · 0 评论 -
C++11范围for详解
这里写自定义目录标题作用使用方法例子使用范围for来修改字符串的值为什么要用引用范围for与常规for循环语句比较使自己定义的容器类型支持范围循环作用C++ 11提供了一个特殊版本的 for 循环,在很多情况下,它都可以简化数组的处理,这就是基于范围的 for 循环。在使用基于范围的 for 循环处理数组时,该循环可以自动为数组中的每个元素迭代一次。使用方法如果对一个 8 元素的数组使用基于范围的 for 循环,则该循环将迭代 8 次。因为基于范围的 for 循环可以自动知道数组中元素的个数,所以不原创 2020-07-01 00:58:29 · 703 阅读 · 1 评论