C++中期:程序内存布局以及对象入门
程序内存布局
引入以32位系统为例,最大支持内存为2^32,即2 ^ 30 * 4 = 4G内存分为内核态和用户态
内核态其中1G内存可分给系统应用,即内核态
用户态另外3G内存分配给用户态用户态由高地址到低地址又可划分为几个层次
栈区栈区内存的占用是由高地址(0x3f3f3f3f)到低地址(0x00000000)进行分配的,由操作系统进行控制,定义变量时地址是由系统分配的
共享库 如果栈发生了溢出,一些变量可能会放到此处
堆区
内存由低地址(0x00000000)往高地址(0x3f3f3f3f)分配,由程序员控制,
printf("%p", *(new int(1)));//打印为00000001
由输出结果可以看出只有程序员使用了堆,堆区才能被内存分配
全局/静态区存放静态(static)变量和全局变量
文字常量区(只读段)只读段就是指类似const一样只允许调用而不允许修改文字常量区存放的是const修饰的变量和字符串常量
程序代码区(只读段)存放定义的函数,仅仅是存放函数而不是函数内部实现过程
值得注意的细节
假设有数组arr1, ...
虚拟机Ubuntu网络开机或突然断连解决方法
1.打开有线连接设置2.点开右边小齿轮3.忘记连接配置4.重启网络,如果要修改为静态ip则根据该图将ipv4地址,子网掩码填写255.255.255.0,网关填写路由地址填写到下方
C++中期:深入namespace
namespace深入研究
1.为什么会出现namespace主要原因:如果两个公司想要互相交流代码,使用的是c语言,会产生代码量复杂冗余的情况
//google公司的某变量int Google_class1_Liu number;//虎牙公司的某变量int Huya_class1_Liu number;
由此可知,这样导致的结果是,为了防止变量重复多出来了一堆不必要的前缀名,因此,C++就有了namespace这一概念
2.常见的namespaceusing namespace std;
与iostream模板密不可分,std命名空间内存在cin,cout,scanf,printf,endl等变量或者函数
3.如何定义一个自己的namespace(1).像函数一样可以直接定义
namespace wd{int num = 1;void print(){ cout<<"print()"<<endl;}}
(2)也可以定义匿名空间
namespace{int num;int a;}
...
洛谷P1786 帮贡排序
难度与考察点
小模拟题,考察sort函数对结构体的排序,c语言里可以使用qsort函数进行相类似的操作,但会麻烦一点
主要思路
1.对各个数据进行输入的同时记录一下他的id位置,用pre保存,在排序时需要用到,因为该题有一个很坑的地方 — 相同等级下原先靠前的要放在前面 2.第一次排序时根据他的分数排序,如果分数相同则看pre 3.排序后对各个分区重新划分职位 4.通过map将string映射为int,在第二次排序时根据第一关键字职位次序与第二关键字等级以及隐藏的第三关键字pre进行排序 4.最后将每个人的姓名职位等级输出即可 5.值得注意的是sort中cmp函数的实现里,除等级和分数要从大到小排序外,其余都是从小到大排序
实现代码
#define _CRT_SECURE_NO_WARNINGS 1#include <iostream>#include <algorithm>#include <map>using namespace std;const int N = 111;struct bang { string name; s ...
dfs与bfs
深度优先搜素(dfs)对二叉树尽可能地往节点的终点搜索,只有走到终点才会返回到分叉路口
特点:执着,不撞南墙不回头
宽度优先搜素(bfs)对二叉树一层层搜索,只有该层完全搜索完成后才会进行到下一层
特点:稳重,喜欢薅羊毛
对比从使用的数据结构来看,dfs使用的是栈,bfs使用的是队列
从使用空间看,dfs只需记录这条路径的所有点,空间复杂度为O(h),bfs记录每层的节点,空间复杂度为O(z ^ h),该特点使bfs有了一个最短路的概念
例题全排列问题(dfs)dfs俗称暴搜,他的关键是顺序
题目描述
按照字典序输出自然数 1 到 n 所有不重复的排列,即 n 的全排列,要求所产生的任一数字序列中不允许出现重复的数字。
输入格式
一个整数 n。
输出格式
由 1 - n组成的所有不重复的数字序列,每行一个序列。
每个数字保留 5场宽。
样例 #1
样例输入 #1
3
样例输出 #1
1 2 3 1 3 2 2 1 3 2 3 1 3 1 2 3 2 1
提示
1≤n≤9。
实现代码//假 ...
为蓝桥杯而来-STL
STL二次学习列表
vector//变长数组,空间扩容时倍增string//字符串,substr返回字串,c_str()返回字符数组的头指针queue//队列push()队尾插入,front()返回对头元素,pop()把对头元素弹出,back()返回队尾priority_queue//优先队列,一种堆,push()往堆中插入元素,top()返回堆顶,pop()把堆顶弹出stack//栈,push()往栈顶添加元素,top()返回栈顶元素,pop()弹出栈顶元素deque//双端队列,对头队尾都可以插入弹出,支持随机访问set,map,multiset,multimap//基于红黑树,平衡二叉树的一种,本质上是动态维护有序序列unordered_set,unordered_map,unordered_multiset,unordered_multimap//基于哈希表实现bitset//位存储,压位
系统为某一程序分配空间时,所需时间与空间大小无关,与申请次数有关
vector#define _CRT_SECURE_NO_WARNINGS 1#include <iostream& ...