主页

C++类内初始化vector的一个小坑与分析解决

问题 先来看这样一份代码: vector<vector<int>> v(10, vector<int>(10)); 没有任何问题, 初始化一个10*10的全零二维数组, 但是, 如果在类内: class P { private: vector<vector<int>> v(10, vector<int>()); public: P() {} void print() { for (auto i : v) { for (auto j : i) cout << j << " "; cout <...

阅读更多

牛客c++acm模式输入输出11道题分析与总结

写在前面 感觉好久没写博客了, 最近看的书多, 但是真正沉淀下来的东西却很少… 这次总结一下C++刷题中常用的一些IO操作, 也就是ACM模式中的一些基本操作. 看到知识星球里面推荐了牛客的一个比赛, 其中有11道题都是关于C++刷算法题完整程序的输入输出部分, 值得新手学习训练一下, 下面是我的解答, 均通过测试, 可以放心食用. 地址: 牛客竞赛_ACM/NOI/CSP/CCPC/ICPC算法编程高难度练习赛_牛客竞赛OJ (nowcoder.com); 1: 开胃菜 链接:https://ac.nowcoder.com/acm/contest/5657/A 来源:牛客网 输入包括两个正整数a,b(1 <= a, b <=...

阅读更多

Ubuntu22.04下编译安装lammps+voronoi的完整方案

写在前面 上次在Windows+cygwin下没有成功安装LAMMPS, 所以这次来试试通过Ubuntu双系统安装LAMMPS以及一些额外的包的安装的方法. 要说安装, 其实是安装成功了的, 但是并不是并行计算版本, 而且最新版也不能运行. 参考: 8.6.4. Using LAMMPS on Windows 10 with WSL — LAMMPS documentation 安装必须的包 sudo apt install -y cmake build-essential ccache gfortran openmpi-bin libopenmpi-dev \ libfftw3-dev libjp...

阅读更多

利用windows+cygwin安装lammps+voro的完整安装方法

写在前面 最近有朋友问我如何安装一个叫做voro++的工科分析软件, 由于这个软件年代过于久远(2013), 并且是C++写的, 在win下需要编译安装, 就折腾了一下, 后来发现在Windows下直接安装的LAMMPS不能编译voro, 那么还得先手动编译安装一个LAMMPS, 折腾了好久, 终于完成了.. 主要困难的地方还是在cygwin的包管理上, 由于没办法直接通过包管理器来安装(事实上有一个包管理器, 但是还需要一些特殊工具才能安装, 实在是麻烦), 那就只能每次需要什么包, 就从setup程序中选中那些包来安装了… 其次就是编译工具链方面, cmake/Make/gcc/g++/这些工具都是必备的, 甚至检测依赖时候显示FFmpeg和clang-format也是需要的...

阅读更多

Linux进程的创建结束类系统调用总结

写在前面 总结一下Linux系统的进程创建/终止/等待等系统调用, 参考: Linux/Unix系统编程手册. 下面主要给出例子, 关于函数原型可以参考书中或者man 2 syscall(例如man 2 fork). 测试环境: Ubuntu 20.04 x86_64 gcc-9 进程创建: fork() 用于创建新的进程, 创建出来的新进程称为子进程, 拥有和父进程一样的代码段/数据段/栈段/堆段. 所以创建新进程的资源消耗较大, 后续采用多线程方式可以解决这个问题. 由于这个函数的设计比较奇怪, 有两个返回值, 在父进程中返回子进程的进程ID, 在子进程中返回0, 错误返回-1, 所以可以用下面的语句制定创建子进程之后的进一步操作: pi...

阅读更多

Linux线程的创建结束类系统调用总结

写在前面 总结一下Linux系统的线程创建/终止/等待等系统调用, 参考: Linux/Unix系统编程手册. 下面主要给出例子, 关于函数原型可以参考书中或者man 7 pthreads. 测试环境: Ubuntu 20.04 x86_64 gcc-9 为什么需要线程? 进程的限制 多进程往往存在如下限制: 进程间资源难以共享. 因为除去只读代码段, 父子进程并不共享内存, 所以必须采用进程间通信(IPC)的方式交换进程间信息. 调用fork()创建进程的代价很高. 虽然采用写时复制技术(Copy-on-write), 还是免不了造成资源的浪费. 线程的优势 线程之间可以方便/快速地共享信息. 只需将数据复制到共享...

阅读更多

Linux之io多路复用系统调用用法总结与对比

写在前面 之前已经介绍过关于基本文件IO, 目录IO的一些内容, 这些IO模型多为阻塞式IO, 当然也可以实现为非阻塞(通过文件状态标志O_NOBLOCK). 下面介绍三种I/O模型: I/O多路复用: select, poll 信号驱动I/O: 通过信号机制减少系统资源占用 $\bigstar$epoll: 基于事件的IO模型 I/O初步 磁盘文件是一个特例, 内核采用缓冲区cache加速磁盘I/O请求, 因此一旦请求的数据传输到内核的缓冲区cache, 对磁盘的write()操作将立即返回, 而不是等数据实际写入磁盘才返回(O_SYNC标志), 与之对应的是, read()调用将数据从内核缓冲区cache移动到用户的缓冲区, 如果请求的数据不在内核缓...

阅读更多

C++类的静态成员总结

引子: 类为什么需要静态成员 有时候类需要与它的一些成员与类本身直接相关, 而不是与类的各个对象都保持关联, 这就减少了成员与每一个类的实例对象的联系, 从而降低资源占用. 另一方面, 如果每次都需要重新更新该成员, 使得对象使用新的值, 这时候只需要修改一份该成员. 本文内容参考: cppprimer 声明静态成员 要点 在成员声明之前加上关键字static使得其与类关联在一起 静态成员可以是public或private的, 类型可以是常量, 引用, 指针, 类等 类的静态成员存在于任何对象之外, 对象中不包含任何与静态数据成员有关的数据(这也是为什么需要类内声明, 类外初始化的原因, 静态数据成员均存在于全局...

阅读更多

Total views.
您是Zorch的第 个小伙伴
Hits