C++类内弹性数组的使用技巧
class P {
public:
int x;
int array_[1]; // Must be declared at the end of the class
};
这里就体现了使用 new 和 malloc 的一个不同, 即 new 不能指定所分配的具体内存大小, 只能让编译器根据对象所占内存的大小来推断(计算), 如果非要指定(并且不是通过 array-new 的方式)那就要用 placement-new 方法. 代码如下:
void t1() {
cout << "sizeof(P)=" << sizeof(P) << endl; // 8
// 24=4+5*4, array_.size=5
...
Clang和 gnu++的区别
默认初始值
#include <bits/stdc++.h>
using namespace std;
void f(int* x) {
cout << x << endl;
cout << *x << endl;
cout << *(x + 1) << endl;
}
int main(int argc, char* argv[]) {
//
int x[0]{};
#ifdef __clang__
// clang
cout << "clang++:\n";
f(x);
#endif
// clang++:
// 0x1...
Golang学习笔记_方法
写在前面
练习, Stringer
Go 语言之旅;
package main
import "fmt"
type IPAddr [4]byte
// TODO: 给 IPAddr 添加一个 "String() string" 方法
func (ip IPAddr) String() string {
return fmt.Sprintf("%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3])
}
func main() {
hosts := map[string]IPAddr{
"loopback": {127, 0, 0, 1},
"googleDNS": {8, 8, 8, 8},
}
for name, ip...
Golang学习笔记_基础语法,数组,切片,,映射,闭包
写在前面
后端, 得开始看看 Go 语言了, 感觉还挺好玩的, 试试.
虽然距离秋招的时间不多了…
教程就是官网的 Tour of Go, 我看的中文版, 还可以, 很详细.
数组
切片
练习题:
Go 语言之旅;
package main
import (
"math"
"golang.org/x/tour/pic"
)
func f(x int, y int) int {
_ = math.Log // placeholder
// return (x + y) / 2
// return x * y
// return x ^ y
// return x * int(math.Log(float64(y))) // cast
...
配置clangd使用指定的c++标准
方法
下面内容均写入在项目根目录下的.clangd 文件中
指定C++标准
CompileFlags:
Add: [-std=c++20]
这个很简单, 但是后来我发现一个问题, 如果目录下存在 C 源文件, 那么就会提示错误, 没有这个编译选项, 那么下面还得添加个排除规则
排除规则
CompileFlags:
Add: [-xc++, -std=c++20] # treat all files as C++
指定编译器
CompileFlags:
Compiler: g++
参考
Configuration;
Dns 会不会返回多个 ip 地址
问题
DNS 解析一个地址的时候会返回多个 IP 吗?
不会
分析
基于 DNS 的负载均衡
实际上可以实现一个域名对应多个 IP 地址的, 只需要在 DNS服务器中添加一条解析记录, 将域名指向服务器的 IP 地址即可.
DNS 解析策略
轮询(poll): DNS 服务器按顺序返回多个 IP 地址, 实现请求的轮流分发道不同的服务器上.
权重: 为每个 IP 地址分配不同的权重, 权重越高的服务器被选中的概率越大.
响应时间: DNS 服务器通过测量服务器响应时间来选择最快的服务器, 将域名解析为对应的 IP 地址.
优缺点
优点
将负载均衡工作交给 DNS, 省去了网站管理维护负载均衡服务器的麻烦
技术实现灵活, 操作简单, ...
Vim 中复制代码常用的一些正则表达式替换技巧
写在前面
这次来写一个比较小的主题, 关于在 vim 中快速替换内容, 也算是精进一下 Vim 技巧了.
这里以复制别人博客文章中的代码为例, 如果有一键复制当然是最好的, 那没有的话就要手动复制了, 而这就会出现一个问题, 如果前面不巧含有行号之类的冗余信息呢? 这就需要自己手动删除了(下例), 由于 Vim 含有很多高级的宏操作, 下面来看看怎样快速解决这个问题. (并且给出以下举一反三的方法)
1namespace A {
2 // S2
3 struct Base {};
4}
5
6namespace M {
7 // S3 not works!
8 namespace B {
9 // S1
10 ...
B树,b+树基本原理与增删改查的c++实现
写在前面
B树
定义
一棵B树$T$是具有以下性质的有根树(根为$T.root$)
每个结点$x$有以下属性:
$x.n$: 当前存储在节点$x$中的关键字个数
$x.n$个关键字本身: $x.key_1$, $x.key_2$, … $x.key_{x.n}$, 以非降顺序存放, 即
\(x.key_1\leq x.key_2\leq ...\leq x.key_{x.n}.\)
$x.leaf$, 布尔值, 如果$x$是叶结点, 为true, 内部节点为false;
内部节点$x$还包含...
共计 465 篇文章,59 页。
您是Zorch的第 个小伙伴
Hits