- 博客(166)
- 收藏
- 关注
原创 VSCode关闭所有终端
按 Ctrl + Shift + P 打开命令面板,然后输入 “终端: 关闭所有终端” 或 “Terminal: Kill All Terminals” 来关闭所有终端。
2024-11-06 22:41:55
407
原创 C语言去掉字符串开头和结尾的空白字符
在C语言中,当指针作为参数传递给函数时,函数内部对指针变量的修改不会影响到调用函数中的原始指针变量。也就是说,函数内部的指针变量只是原始指针的一个拷贝。另外,返回 str 可以让这个函数与其他函数链式调用。比如 printf(“%s”, trim(str));如果不返回指针,原始指针依然指向字符串开头,也就是还没处理开头空白字符的位置。
2024-07-28 16:43:53
910
原创 vscode免密登陆ssh
注意:不要用ctrl+v粘贴,我试了几次都提示密码错误,应该是按下快捷键时被当作了密码输入。以管理员模式打开powershell,依次运行以下指令,可以缓存密码。如果私钥设置了密码,即使用密钥登陆依然要每次输出ssh密码。接着输入以下命令添加密钥,他会提示你输入密码。复制好密码好,只要鼠标右键点击一次就能粘贴。好了,现在可以免密登陆ssh了。
2024-07-26 09:02:08
592
原创 C语言系统调用linux文件系统
在C语言中,openwrite和read函数是系统调用(system calls),它们直接由操作系统提供,用于底层的文件操作。这些函数是UNIX和类UNIX系统(如Linux)中的标准接口,不同于C标准库中的文件操作函数(如fopenfwrite和fread。
2024-07-25 14:57:29
1530
原创 pandas比较2个dataframe不同部分
翻译自:https://stackoverflow.com/questions/17095101/compare-two-dataframes-and-output-their-differences-side-by-side。*注意:重要的是df1和df2在这里共享相同的索引。为了克服这种模糊性,您可以确保只使用df1.index & df2.index查看共享标签,但我认为这将作为练习。
2024-07-24 13:09:36
652
原创 VSCode C/C++代码格式化
会自动格式化注释块,输入过程中按Enter,新的一行会自动添加。Auto Comment Blocks 插件可以在输入时就格式化。.clang-format 对注释块貌似无法格式化。
2024-07-24 09:46:03
312
原创 Linux定时执行程序和关闭程序
crontab是一个强大的工具,可以帮助你自动化定时任务。在编辑 crontab 文件时,确保格式正确并且任务路径和权限设置正确,以确保任务按预期运行。
2024-07-23 10:33:49
999
原创 std::thread 参数为类成员函数
在 C++ 中,将成员函数传递给需要正确处理对象的实例以及成员函数指针。以下是一个简单的示例,展示了如何将成员函数传递给&obj。
2024-07-22 20:24:24
540
原创 C++ 范围for循环时对容器进行删除
在 C++ 中,在使用范围for循环时对容器进行修改(例如删除元素)可能会导致未定义行为。这是因为范围for循环的迭代器可能会在容器被修改后失效。会在循环过程中删除元素,这样会导致迭代器失效,进而引发潜在的崩溃或未定义行为。:在标准for循环中,可以显式控制迭代器的行为,并在删除元素后手动更新迭代器。:首先记录要删除的键,循环结束后再删除这些键。时直接修改它,从而避免未定义行为的发生。这两种方法都可以避免在遍历。
2024-07-21 20:47:20
399
原创 时间复杂度
O(\log n):表示性能更好,特别是在处理非常大的数据集时,算法运行时间增加得较少。O(n):表示性能相对较差,因为运行时间随输入规模线性增加。因此,在设计和选择算法时,优先考虑时间复杂度较低的算法(如O(\log n))可以获得更高效的性能,尤其是在处理大型数据集时。
2024-07-21 14:17:40
354
原创 C语言实现类似字典的功能(字符串索引的数组)
在C语言中,数组的索引只能是整数。数组索引用于访问数组中的元素,而数组本质上是一个线性结构,索引必须是整数类型(如。:定义一个结构体,其中一个成员是字符串,另一个成员是数组的值,然后在这个结构体数组中进行查找。:使用两个数组,一个存储键(字符串),一个存储值,通过查找键数组的索引来访问值数组中的对应值。上述方法在C语言中常用于实现类似于其他高级语言中的字典或映射结构。:使用字符串作为键,整数或指针作为值。库或者自己实现一个简单的哈希表。),以便指示数组中的具体位置。
2024-07-21 13:37:25
653
原创 C语言 灵活数组成员
在C99及C++标准中,引入了灵活数组成员(flexible array member)的概念。这个特性允许在结构体中定义一个数组,其大小在编译时未知,实际大小在运行时确定。通常,灵活数组成员的定义方式是int data[],这表明数组的大小是动态的。占位符用途对齐和布局:使用是一个常见的技巧,用于确保结构体在内存中的对齐和布局符合要求。这种方法让编译器在计算结构体的总大小时考虑到数组的开始位置,方便动态分配实际需要的内存。占位符:在结构体中使用。
2024-07-19 14:09:47
1188
原创 Linux输出重定向详解(backup)
在 Linux 中,输出重定向是将命令的输出(标准输出或错误输出)重定向到文件或其他位置的过程。常见的重定向符号包括>>2>和&>。
2024-07-19 12:04:51
1052
原创 Linux输出重定向到文件立即输出
程序中断时,文件为空的原因可能是由于缓冲机制。标准输出(stdout)和标准错误输出(stderr)默认是缓冲的,这意味着数据在写入文件之前会先存储在缓冲区中。如果程序在缓冲区的数据被写入文件之前中断,这些数据将不会出现在文件中。
2024-07-19 11:56:55
445
原创 C++多线程不用加锁的情况(修改)
同样 std::vector 的 push_back 方法在单个线程中是原子的,它会确保元素要么完全添加到向量中,要么不添加(在元素添加的过程中,其他线程不能读取到部分数据)。即使在多线程环境中,也不会出现其他线程读取到部分添加的元素的情况。比如写入一个字符串 “Hello, world!\n” 要么成功完全写入,要么失败没有写入,不存在只写入一半"Hello, wor" 所以在多线程读取时也不可能读取到一半。文件写入操作一般是原子性的,这意味着写入的数据要么是完整的,要么是未写入。
2024-07-19 11:33:32
354
原创 C++多线程和std::vector
C++ 标准没有定义在一个线程正在修改容器的同时,另一个线程可以安全地读取容器的内容。因此,这种情况下的行为是未定义的,可能导致程序出现不可预测的结果。
2024-07-18 03:49:41
542
原创 Value too large for defined data type
找到错误信息:“Value too large for defined data type”(数值超出定义的数据类型范围),表明在使用。于是把结构体字段都打印出来都没有超过范围,最后添加 tm.tm_isdst = -1;自动判断夏令时, 终于正常。使用自定义结构体时,timestamp 时而正常,时而返回-1,使用。结构体中的某些字段值超出了函数支持的范围,导致无法正确处理。
2024-07-16 21:28:00
236
原创 C++找到错误的具体信息
使用 fprintf(stderr, …),将错误消息输出到标准错误流 stderr。这种做法是为了将错误信息输出到一个专门用于记录错误的流中,而不是普通的输出。区分错误信息和普通输出:将错误信息输出到 stderr 可以帮助开发者在程序运行时更容易地区分错误信息和普通输出,便于调试和排查问题。错误信息的捕捉和记录:通过将错误信息输出到 stderr,可以方便地在日志系统中捕捉和记录这些信息,用于后续的分析和跟踪。为什么不用printf来打印输出?
2024-07-16 21:05:36
288
原创 std::getline
是 C++ 标准库中的一个函数,用于从输入流中读取一行数据并存储到字符串中。它通常用于读取用户输入或从文件中读取文本数据。以下是。
2024-07-15 21:06:50
1774
原创 Tick数据的清洗和1分钟K线合成
10:15推送的tick是有效数据,其价格和成交量都有变化,合并为10:14开始的1分钟K线。15:00推送的tick是有效数据,其价格和成交量都有变化,合并为14:59开始的1分钟K线。有的品种如rb2410:15点后依然会推送有效数据,不过价格和成交量都不再变化,合并到最后的K线。有的品种如rb2410:23点结束,所以23点推送的tick属于22:59开始的K线。有的品种如sc2408:2:30结束,那么23点推送的K线属于23点开始的K线。
2024-07-14 22:49:52
1292
1
原创 pandas时区问题
原因是 pandas 返回的是格林威治标准时间,与北京时间差了 8 小时。解决方案,参数origin ,可以指定时间戳的起始时间。转换时间戳,输出时间差8小时。
2024-07-14 19:55:17
323
原创 C++休眠的方法
在这个示例中,主线程在调用 cv.wait(lock);之后会永久等待,直到其他线程通过 cv.notify_one() 或 cv.notify_all() 唤醒它。所以只要不唤醒它,就等同于windows的Sleep(INFINITE)Windows平台的API函数 Sleep(INFINITE);休眠时间为永久,Linux下没有类似的函数。C++可以用条件变量 std::condition_variable 实现类似的效果。
2024-07-09 21:11:46
480
原创 Linux常用命令
clearclear:清空屏幕内容,但保留缓冲区,可以向上滚动查看之前的输出。resetreset 命令不仅清空屏幕内容,还会重置终端的设置和状态,恢复到默认状态。它会重新初始化终端,包括终端的字符集、终端模式、输入/输出设置等。但不会终止或改变当前会话。当前会话中的所有进程和环境变量都会保持不变。
2024-07-09 15:12:14
221
原创 C++多线程和循环队列
为了演示这些问题,可以运行这个程序,并且在没有互斥锁的情况下,很有可能会看到不一致的输出,比如重复的输出或者未定义的行为。解决方法就是在关键部分添加互斥锁。: 多线程并发修改共享数据时,可能会导致程序行为不可预测甚至崩溃。假设我们不使用互斥锁,并且我们在两个线程中分别调用。操作可能会读取错误的数据或读取到无效的数据。在这个例子中,没有使用任何锁机制来保护。变量,导致它们的值不一致。操作可能会覆盖队列中的数据,而。: 两个线程可能同时访问和修改。
2024-07-09 14:59:20
455
原创 C++多线程 条件等待和通知
主要用于多线程编程中的条件等待和通知机制。它允许一个或多个线程等待某个特定条件达成,一旦条件满足,它可以通知正在等待的线程继续执行。提供了一种高效且线程安全的方式,用于在多线程环境下等待和通知线程。:与轮询方式相比,使用条件变量可以有效避免忙等待,节省系统资源。方法等待条件变量,同时释放持有的。,使得其他线程可以访问共享资源。方法通知等待中的线程继续执行。:当条件满足时,可以调用。提供对互斥锁的自动管理。
2024-07-09 12:23:53
811
原创 C++线程锁std::mutex
mutex”是“mutual exclusion”的缩写,意思是互斥锁。互斥锁用于多线程编程中,以确保同一时间只有一个线程能够访问某一共享资源,从而避免数据竞争和不一致性。std::mutex是最基本的互斥锁,用于保护共享数据。它有两个主要操作:lock和unlock。
2024-07-09 11:44:44
319
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人