抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

记录 C++ 中使用过的有用代码,以后应该还用的上。

const char, string 与 char 的转化

减少 vector 增加元素的开销

获取文件描述符

读取 ivecs 数据文件

ivecs 格式每个向量构成:4 + dim * 4 字节,4 为一个 int

读取 bvecs 数据文件

bvecs 格式每个向量构成:4 + dim * 1 字节,4 为一个 int

mmap 内存映射读取大文件的一部分

打印错误信息

  • void perror(const char *s) 用来将上一个函数发生错误的原因输出到标准设备 (stderr)。参数 s 所指的字符串会先打印,后面再加上错误原因字符串。此错误原因依照全局变量 error 的值来决定要输出的字符串。在库函数中有个error变量,每个error值对应着以字符串表示的错误类型。当调用函数出错时,该函数已经重新设置了error的值。perror 将输入的一些信息和现在的error所对应的错误一起输出。

  • strerror() 通过标准错误的标号,获得错误的描述字符串,将单纯的错误标号转为字符串描述,方便用户查找错误。

创建虚拟内存

虚拟内存中创建 vector 数组

在虚拟内存中使用定位 new 运算符(placement new),最后手动在虚拟内存中调用 std::vector 的析构函数

placement new

允许在已经分配好的内存区域中创建对象,可以决定对象存储的确切位置。

其中 v_mem 为指针,指向预分配的内存地址。

保存已访问的数据

哈希表 unordered_set

构造 vector:通过其他 STL 容器初始化一个 vector

vector 构造函数:

获取文件大小

通过 seekg()tellg()

多态中父类析构调用子类析构

将析构函数声明为虚函数实现。

barrier 方式的无锁线程同步

Linux 中提供了多种同步机制,其中使用 barrier 是多线程之间进行同步的方法之一。

假设多个线程约定一个栅栏,只有当所有的线程都达到这个栅栏时,栅栏才会放行,否则到达此处的线程将被阻塞。

在代码中,当所有 thread 都执行到 barrier_wait() 后,才继续执行后续代码。

输出结果:




本站采用 Volantis 主题设计