C/C++ 向量容器(Vector)

C++ STL之所以得到广泛的赞誉,也被很多人使用,不只是提供了像vector, string, list, map等方便的容器,更重要的是STL封装了许多复杂的数据结构算法和大量常用数据结构操作。
vector封装数组,list封装了链表,mapset封装了二叉树等.
STL中标准关联容器set, map内部采用的就是一种非常高效的平衡检索二叉树:红黑树,也称为RB树(Red-Black Tree)。
RB树的统计性能要好于一般平衡二叉树,所以被STL选择作为了关联容器的内部结构。

首先介绍一个万能头文件,该头文件包括了大多数的C/C++常用头文件,以及STD内各容器和算法的头文件。

1
2
#include <bits/stdc++.h>
using namespace std;

Vector

Vector的存储空间是连续的, 与数组的差别就在于空间运用的灵活性。Vector的空间是可以动态增长的(但是不能减小)。

查看全文

C/C++ 笔记

类型数值范围

  1. 绝对值在$10^9$范围内的整数都可以定义为int类型
    int:32bit 4Byte
    $$-2^{31} \sim 2^{31} -1$$

  2. 绝对值超过$10^{10}$范围内的整数需要定义为long long类型
    long long类型在赋初值时,末尾必须加上LL
    long long:64bit 8Byte
    $$-2^{63} \sim 2^{64}-1$$

  3. float:32bit 4Byte 6-7位的精度
    1bit作为符号位 8位作为指数位 23位作为尾数位

  4. float:64bit 8Byte 15-16位的精度
    1bit作为符号位 11位作为指数位 52位作为尾数位

解释嘛~默默划掉上面的4行,碰到浮点型只用double就行了

数组的小大

超过$10^6$的数组最好定义在主函数外部

  • 函数内容使用:系统栈
  • 函数外部:静态存储区

查看全文

C/C++ 字符串(String)

介绍

其和char*的字符数组在概念上没有什么不同,
而为何要使用string类,是因为和字符数组比起来,不用担心长度、拼接等问题。
另外它集成了很多操作函数能够快速完成很多需求。

定义:

1
2
3
4
5
6
7
8
9
10
11
12
#include <string> // 导入,PS.不是<string.h> 他们是两个头文件
using namespace std;

string s1; // 声明空字符串
s1="i love you"; // 赋值

string s2(s1); // 声明一个和s1内容相同的s2
string s3("In mountains deep"); // 声明的同时赋值
string s4(7, 'j'); // 声明一个包含7个'j'的字符串

// 输出(不能直接输出s1,因为s1是一个类,不像python输出类时会自动调用__str__方法)
printf("%s\n", s1.c_str());

查看全文

C/C++ 字典(Map) 组合(Pair) 集合(Set)

介绍

map内部自建一颗红黑树(一种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的。

字典、映射、哈希表

  • 不能使用字符数组作为type, 只能使用STD本身的字符串
  • 根据键自动递增排序

定义:

1
2
3
4
5
6
7
8
9
10
11
12
#include <map>
using namespace std;

// 插入数据, 迭代输出
map<int, string> mp;
map<int, string>::iterator item;
mp[112] = "April";
for (item = mp.begin(); item != mp.end(); ++item){
printf("%d: %s\n", item->first, item->second.c_str());
// 或者
printf("%d: %s\n", item->first, mp[item->first].c_str());
}

查看全文

C/C++ 栈(Stack) 队列(Queue) 堆(Heaq)

Stack

  • 后进先出的线性表
  • 只能通过top()访问栈顶的元素

默认系统对程序的栈内存限制为几千至几万层、为了模拟递归算法,可以使用自实现的栈来完成

1
2
3
4
5
6
7
8
9
10
#include <stack>
using namespace std;

stack<int> st;

st.push("x"); // 入栈 O(1)
st.top(); // 应该先判断是否为空栈后再获取栈顶元素 O(1)
st.pop(); // 同上再弹出栈顶元素 O(1)
st.empty(); // 判断是否空栈 O(1)
st.size(); // 获取栈的大小 O(1)

查看全文

C/C++ 常用算法(Algorithm)

常用功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <algorithm>
using namespace std;

max(x, y); // 返回x,y中大的值
min(x, y); // 返回x,y中小的值
abs(x); // 返回x的绝对值,据说浮点数不行,但是我试了好几个编译器,貌似都可以

swap(x, y); // 交换x,y

reverse(it1, it2); //将两个迭代器之间的元素进行倒置
//举例:
reverse(a, a+sizeof(a)); // 数组
reverse(v.begin(), v.begin()); // 容器

fill(a, a+5, "ok"); // 填充数组前五位为“ok”
fill(a, a+5, "ok"); // 填充数组前五位为“ok”
// 任意类型,任意值,但0/-1最好用memset.

查看全文

使用Nginx为公有云COS挂上SSL证书

问题背景

之前的博客是使用腾讯云的服务器和COS(对象存储),虽然腾讯云提供的COS只支持HTTP,但是可以在腾讯云的CDN服务上,代管SSL证书,再绑定自己的域名即可。

后来我的学生认证到期,CDN服务开始收费,没办法,在偏那么点点巨额的费用面前,我妥协了,删除了所有的CDN服务。

这带来了一个问题,我的博客没办法再拥有HTTPS了,这对于我这种强迫症来说,是无法容忍的。经过一段时间的摸索,发现使用Nginx可以实现将HTTP链接,代理成自定义的域名地址,再给这个域名绑定SSL证书,博客的HTTPS小绿锁又可以回来啦。

查看全文

CentOS 7 配置使用

CentOS 7 是我除了MAC OSX之外,最喜欢的操作系统,没有之一,无论是在服务器端,还是在桌面端(这个可能是我菜,驾驭不了Fedora)。

首先因为工作中,很多电脑都是无法访问外网,甚至是服务器,因此能够快速搭建局域网内的软件仓库,是十分必须的。而Ubuntu,我不想吐太多槽,你们知道去下载一个个deb文件,再拷到自己电脑上安装的恐惧吗。

其次,是因为服务的配置简单,由于之前没有记录,我无法给出证据来证明这一点,但如果读者是一个在纠结使用CentOS还是Ubuntu的新手,我想你使用CentOS会比你使用Ubuntu踩到坑少得多,集中在专业知识上的时间多得多。

镜像介绍

CentOS 官网下载地址: Download CentOS

在来到官网后,我们看到有三种镜像,这个时候初接触的小伙伴,肯定会纳闷了,我特么怎么选哪个呢?!
没事,我来解释一下。

首先,三种镜像为

  1. DVD ISO 包含了系统和常用的软件包(4.47G)
  2. Everything ISO 包含了系统和官方提供的所有软件包(9.4G)
  3. Minimal ISO 几乎只包含系统和系统必备的软件(950M)

查看全文

CentOS 7 Sublime安装与配置

虽然很少人用CentOS来做客户机,但是我,徐日天,就是这么任性,我就是用CentOS.

安装

1
2
3
4
5
6
# 安装gpg公钥
rpm -v –import https://download.sublimetext.com/sublimehq-rpm-pub.gpg
# 添加源
yum-config-manager –add-repo https://download.sublimetext.com/rpm/stable/x86_64/sublime-text.repo
# 安装
yum install -y sublime-text

查看全文

博客功能测试

Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub.

标签、分类

标签显示如上,分类可以有层级

数学公式

$$\sum_{i=0}^N\int_{a}^{b}g(t,i)\text{d}t$$

查看全文