undefined

c++中输入cin

系统的输入都有一个缓冲区,当一次键盘输入结束时会将输入的数据存入输入缓冲区,而cin对象直接从输入缓冲区中读取数据。正因为cin对象是直接从缓冲区取数据的,所以有时候当缓冲区有残留数据的时候,cin对象会直接取得这些残留数据而不会请求键盘输入。

1. cin>>

  • 当 cin>> 从缓冲区中读取数据的时候,若缓冲区中第一个字符是空格、tab或者换行这些分隔符时,cin>> 会将其忽略并清除,继续取下一个字符,若缓冲区为空,则继续等待。但是如果读取成功,字符后面的分隔符是残留在缓冲区的。 cin>> 不做处理。
  • 如果不想略过空白字符,可以使用 nosklpws 流控制。比如 cin >> noskipws >> a;
  • getline(cin, str); getline 读取数据的时候,不会忽略输入缓冲区中换行、tab 等
查看更多

undefined

谷歌的测试框架

1
2
3
4
5
6
EXPECT和ASSERT系列的区别:
1. EXPECT_* 失败时,案例继续往下执行
2. ASSERT_* 失败时,直接在当前函数中返回,当前函数中ASSERT_* 后面的语句将不会执行

可以使用操作符 << 将一些自定义的信息输出,例如:
EXPECT_EQ(x, y) << "error" << 代码中的变量

数值型数据检查:

查看更多
1
2
/lib/ld-linux-aarch64.so.1
/lib/aarch64-linux-gnu/libc.so.6

要让一个 so 文件可以直接运行,只需要在编译时指定入口函数即可,否则强制执行一个 so 文件会导致出 core。gcc/g++ 即 c/c++ 在实现上略有不同

一、gcc 编译

如下源代码

查看更多

c++ 中 lower_bound 和 upper_bound 的用法

c++ 中 lower_bound 和 upper_bound 的用法

lower_bound 和 upper_bound 都是利用二分查找的方法在一个排好序的数组中进行查找的

在从小到大的排序数组中:

  • lower_bound(begin, end, num) 从数组的 begin 位置到 end-1 位置二分查找第一个大于或等于 num 的数字,找到返回该数字的地址,不存在则返回 end。
  • upper_bound(begin, end, num) 从数组的 begin 位置到 end-1 位置二分查找第一个大于 num 的数字,找到返回该数字的地址,不存在则返回 end。
查看更多

内存对齐

内存对齐

计算机对基本类型数据在内存中存放的位置有限制,会要求这些数据的首地址的值是某个数(通常它是 4 或 8 或 16)的倍数,这个就是内存对齐

一、必要性

假设一个 int 变量(32 位系统,4字节)存放在从地址 0x1 开始的连续 4 个字节地址中,处理器去读取数据时,得先从 0x0 地址开始读取第一个 4 字节块,剔除不想要的字节(0x0 地址),然后从地址 0x4 开始读取下一个 4 字节块,同样剔除不想要的数据(0x5、6、7 地址),最后留下的两块数据合并放入寄存器。这样的话,访问一个数据需要做很多工作。

在内存对齐的情况下,一个 int 变量(32 位系统,4字节),处理器可以一次性将它读出来,效率大大提高。这是性能原因

为什么需要内存对齐:

查看更多