学c++
weixin_51187533
这个作者很懒,什么都没留下…
展开
-
2023-10-7 看C++八股的一些困惑
有副作用的函数可以更直接地操作外部资源,但也增加了代码的复杂性和不确定性,因为它们引入了对外部状态的依赖和可能的竞态条件。3、系统资源泄漏(Resource Leak)是指程序在使用系统分配的资源(如内存、文件句柄、网络连接等)后没有适当地释放这些资源,导致系统资源的浪费和耗尽。系统资源浪费:未释放的资源会一直占用系统的内存、文件句柄或网络连接等资源,导致系统资源的浪费。5、下面的程序输出乱码,因为p返回的是指向栈内存的地址,函数运行完后原来的地址所放置的内容被抹除。原创 2023-10-07 18:00:22 · 1114 阅读 · 2 评论 -
2022-6-21C++复习题
#includeusing namespace std;int a[ ]={1,3,5,7,9};int * p[ ]={a, a+1, a+2, a+3, a+4};void main( ){cout转载 2022-06-21 20:39:59 · 127 阅读 · 0 评论 -
2022-3-2 vector 的 assign 用法
#include<iostream>#include<vector>using namespace std;int main(void){//void assign (initializer_list<value_type> il); vector<int> vc; vc.assign({1,2,3,4,5,6}); for(int i = 0;i < vc.size();i++){ cout <&l原创 2022-03-02 21:21:08 · 577 阅读 · 0 评论 -
2022-3-2 C++ reserve 和 resize 的区别
#include<iostream>#include<vector>using namespace std;int main(void){ vector<int> v1,v2; v1.resize(10); v1.push_back(100); for(int i = 0;i < v1.size();i++){ cout << v1[i] << " "; } cout &l原创 2022-03-02 20:55:55 · 366 阅读 · 0 评论 -
2022-3-1 effective C++中关于 typename 的解释,解决了我好久的困惑,无知还是看书少的缘故
class 和 typename 在声明一个 template parameter(模板参数)时意味着完全相同的东西。template <class pointer>template <typename pointer>//这两个东西是一样的使用 template 的时候,如果没有确定类具体是什么,但是在函数中又用到了类的成员函数。说明函数里面使用的函数对类有依赖性,这个时候要加上 typenametemplate // print 2nd element invoid转载 2022-03-01 19:54:14 · 74 阅读 · 0 评论 -
2022-1-19牛客Linux C++ 项目 —— 内存映射
如何通过修改内存映射来通信?进程 1 修改了内存当中的内容,系统会将文件当中的内容同步,进程 2 也将同一个数据文件的内容映射到自己的内存当中,便可以读取到修改后的文件内容。从而实现了进程间的通信。...转载 2022-02-23 10:21:21 · 301 阅读 · 0 评论 -
2022-2-18 IO 多路复用的相关函数的介绍
零、一些基本函数的介绍1、socket ()#include<sys/socket.h>int socket(int domain, int type. int protocol);参数含义: int domain --> 选择: (只列出比较常见的)IPV4:AF_INETIPV6:AF_INET6本地协议:AF_UNIX AF_LOCATint type --> 选择协议:SOCK_STREAM -->TCP "面向连接的、可靠转载 2022-02-19 16:03:45 · 107 阅读 · 0 评论 -
2022-2-5 Leetcode 441.排列硬币
// class Solution {// public:// int arrangeCoins(int n) {// int i = 1;// for(;((1+i)*i)/2 <= n;i++){// }// return i -1;// }// };// 1 + 2 + 3 + …… + n = (1+n)*n/2;// runtime error: signed integer overflow:...转载 2022-02-05 12:10:02 · 129 阅读 · 0 评论 -
2022-2-3 牛客C++项目 —— 生产者消费者模型(条件变量、信号量)
如果生产者将容器填满,需要通知消费者,如果消费者将容器清空,需要通知生产者。(我个人觉得如果有多个生产者和消费者,就排成队列,通知第一个就行。不知道实际情况是什么样子的)/*生产者消费者模型(简单版)*/#include<stdio.h>#include<pthread.h>#include<stdlib.h>#include<unistd.h>struct Node{ int num; struct Node*next转载 2022-02-03 20:22:09 · 215 阅读 · 0 评论 -
2022-2-3 牛客C++项目 —— 读写锁
/*读写锁的类型 pthread_rwlock_tint pthread_rwlock_init(pthread_rwlock_t *restrict rwlock, const pthread_rwlockattr_t *restrict attr);int pthread_rwlock_destroy(pthread_rwlock_t *rwlock);int pthread_rwlock_rdlock(pthread_rwlock_t *rwlock);int pthread_rwlock_转载 2022-02-03 15:39:51 · 232 阅读 · 0 评论 -
2022-2-1 牛客 C++项目 —— 线程同步
第一版:是不同的线程各卖各的,会导致最终买了300张票因为 100 放在局部变量,每个线程人手一个/*使用多线程来买票的案例有 3 个窗口,一共是 100 张票*/#include<stdio.h>#include<pthread.h>#include<stdlib.h>void *sellticket(void*arg){ int ticket = 100; while (ticket > 0) { pri转载 2022-02-03 10:06:23 · 280 阅读 · 0 评论 -
2022-2-1 牛客C++项目 —— 线程属性
/* int pthread_attr_init(pthread_attr_t *attr); - 初始化线程属性变量 int pthread_attr_destroy(pthread_attr_t *attr); - 释放线程属性的资源 int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate); - 获取线程分离的状态属性转载 2022-02-01 16:32:08 · 125 阅读 · 0 评论 -
2022-2-1 牛客C++项目 —— 线程终止cancel
/*#include <pthread.h>int pthread_cancel(pthread_t thread);功能:取消线程(让线程终止)(比如说杀毒软件清理内存清理到一半后取消清理内存)取消某个线程,可以终止某个线程的运行,但不是立马终止,而是当子线程执行到一个取消点,线程才会终止(线程得具有可终止的特性)取消点:系统规定好的一些系统调用可以粗略的理解为用户区到内核区的切换的位置,这个位置称之为去小店*/#include<string.h>#inclu转载 2022-02-01 15:33:55 · 216 阅读 · 0 评论 -
2022-2-1 牛客C++项目 —— 线程分离
/*#include <pthread.h>int pthread_detach(pthread_t thread);功能:分离一个线程。被分离的线程在终止的时候,会自动释放资源给系统。1.不能多次分离,会产生不可预料的行为2、不能去连接已经分离的线程会报错。(我的语言组织能力咋这么差?不需要通过其他线程对这种终止的线程连接来释放资源。如果对已经分离的线程再次分离,是未定义行为。)参数:需要分离的线程的id成功就返回0,失败就返回错误号*/#include<str转载 2022-02-01 14:47:43 · 306 阅读 · 0 评论 -
2022-1-30 牛客C++项目 —— 连接已经终止的线程
/*#include <pthread.h>int pthread_join(pthread_t thread, void **retval);-功能:和一个已经终止了的线程进行连接 回收子线程的资源 这个函数是阻塞函数,调用一次只能回收一个子线程 一般在主线程中使用-参数:thread 需要回收的子线程的id retval 二级指针,接受子线程退出时的返回值 成功,返回0,失败,返回非零值,并且设置错误号转载 2022-01-30 20:38:42 · 140 阅读 · 0 评论 -
2022-1-30 牛客 C++ 项目 —— 终止进程
/*#include <pthread.h>void pthread_exit(void *retval);-功能:终止一个线程,在哪个线程中调用,就终止哪个线程-参数:retval 要传递一个指针,作为一个返回值,可以在pthread_join()当中获取到。木有返回值,毕竟线程终止了还要啥返回值pthread_t pthread_self (void) 获取当前线程的IDint pthread_equal(pthread_t t1,pthread_t t2);功能:比较两转载 2022-01-30 20:00:19 · 99 阅读 · 0 评论 -
2022-1-29 牛客C++项目 —— 线程概述与线程创建
线程和进程区别有哪些?从信息共享,创建代价这两个角度分别来谈论进程和线程缺点和优点。栈段和text段会分给每个线程一小段内核数据基本都是共享的/*一般的情况下,main函数所在的线程称之为主线程????(main线程,其余创建的线程称为子线程)程序中默认只有一个进程,调用fork()会产生两个进程程序中默认只有一个线程,pthread_create()函数调用,两个线程#include <pthread.h>int pthread_create(pthread_t *thre转载 2022-01-29 15:40:48 · 177 阅读 · 0 评论 -
2022-1-25 牛客C++项目 —— SIGCHID 信号
SIGCHLD 可以用来解决僵尸进程的问题。虽然父进程可以采用 wait()来回收子进程的资源,但是 wait ()函数是阻塞的,父进程也有自己的业务逻辑,不能老是为等待子进程而停留。父进程通过捕捉到 SIGCHLD ,并且对其进行信号的处理,便可以回收子进程的资源。/*SIGCHLD 信号产生的3个条件1、子进程结束了2、子进程暂停了3、子进程继续运行都会给父进程发送该信号,父进程会默认忽略该信号使用 SIGCHLD 信号解决僵尸进程的问题。*/#include<stdio..转载 2022-01-27 07:51:24 · 257 阅读 · 0 评论 -
2022-1-25 牛客C++ 项目 —— sigaction 函数
sigaction 函数sigaction 函数和 signal 函数 都是信号处理函数,但是由于 signal 函数在不同版本的 Linux 系统下的实现方式不一样,可能出现的行为也不一样。所以尽量使用 sigaction 函数/*#include <signal.h>int sigaction(int signum, const struct sigaction *act,struct sigaction *oldact);-功能:检查或改变信号的处理,信号捕捉。-参数:转载 2022-01-25 10:20:36 · 314 阅读 · 0 评论 -
2022-1-23 C++ —— STL tuple
tuple 是一个容器可以放下不同类型的数据。不明白的地方是,为什么 tuple 的总大小不是所有元素的总和,而是其他的事情。x个参数拆分成一个参数 和 (x-1)个参数,向这样递归的拆分下去,再让 x 个参数的继承 (x-1)个参数,依次迭代的继承下去。这种设计模式真的好神奇啊。...原创 2022-01-24 15:03:30 · 225 阅读 · 0 评论 -
2022-1-23 牛客C++项目 —— 信号集及其相应的函数
阻塞信号集和未决信号集1、用户通过键盘 Ctrl + C,产生 2 号信号 SIGINT(信号被创建)2、信号产生但是没有被处理(未决状态)在内核中所有的没有被处理的信号存储在一个集合当中(PCB 当中的未决信号集)SIGINT 未决信号,2号信号被存储在第二个标志位上。这个标志位的值为 0 ,说明信号不是未决状态这个标志位的值为 1, 说明信号是未决状态3、这个未决信号需要被处理,在处理之前需要和另一个信号集(阻塞信号集)进行比较阻塞信号集默认不阻塞任何信号(也是就是阻塞信号集转载 2022-01-23 09:32:50 · 206 阅读 · 0 评论 -
2022-1-23 牛客C++ 项目 —— signal 函数
/* #include <signal.h> typedef void (*sighandler_t)(int); sighandler_t signal(int signum, sighandler_t handler); -功能:设置捕捉某个信号的处理行为 (话说和 C++、Java 当中的捕捉异常并处理真的好像 -参数:要捕捉的信号 -handler 捕捉到的信号应该如何处理转载 2022-01-23 08:11:57 · 280 阅读 · 0 评论 -
2022-1-22 牛客C++项目 ——setitimer函数
/*#include <sys/time.h>int setitimer(int which, const struct itimerval *new_value,struct itimerval *old_value);-功能:设置定时器(闹钟),可以替代 alarm 函数,精度微秒us,可以实现周期性定时。-参数:-which:以什么时间计时 -ITIMER_REAL 真实时间(walk clock time)时间到达,发送 SIGALRM ,常用 -ITIMER转载 2022-01-22 11:01:03 · 201 阅读 · 0 评论 -
2022-1-22 牛客C++项目 —— alarm 函数
/* #include <unistd.h>unsigned int alarm(unsigned int seconds);-功能:设置定时闹钟,函数调用的时候开始计时,当倒计时为 0 的时候。函数会给当前的进程发送一个信号 SIGALARM-参数:second 倒计时时长,单位:秒。如果参数为 0 ,则计时器无效(不进行倒计时,不发送信号)取消一个计时器可以通过将参数设置为 0 alarm(0)-返回值:-0 之前没有定时器-之前有定时器,返回之前的定时器剩余的时间ala转载 2022-01-22 10:08:24 · 727 阅读 · 0 评论 -
2022-1-21 迭代器的适配器
adapter 统一的做法是将原来的对象记下来,再包装上新的一层接口。反向迭代器就是对于原来的迭代器取相反的操作。原创 2022-01-21 15:16:43 · 68 阅读 · 0 评论 -
2022-1-19 C++ STL —— adapters
adapter 对 某些东西 进行改造,取用其的功能,并且对用户提供接口,感觉就像是用户和某些东西的中间层。容器适配器 stack,queue它们内含一个 deque 作为底层容器,并且只对用户开放部分接口和容器。...原创 2022-01-20 15:10:13 · 190 阅读 · 0 评论 -
2022-1-19 C++STL—— 仿函数 functor
仿函数是为了算法而服务的。我的理解是,相较于函数,仿函数能够实现泛型参数。如果一个 class 里面重载小括号,这样的函数创建出来的对象就叫做函数对象。如果想要自己写出的 functor 和 STL 体系融为一体,需要继承 binary_function 和 unique_function 。仿函数需要继承的模型。来是实现真正的泛型传入参数。这一页关于适配器完全没有看懂...转载 2022-01-19 14:51:52 · 97 阅读 · 0 评论 -
2022-1-16牛客C++项目——Linux多进程编程——进程间通信
常见的面试题:1、你知道进程间通信的方式有哪几种吗?2、这个通信方式具体的实现原理是什么?怎么实现的?复习时候需要使用的问题:1、进程间的通信是什么?2、进程间通信的目的是什么?管道的文件特质体现在哪里?管道两端是文件操作符:输入和输出的文件操作符。匿名管道多用于两个有关系的进程之间的通信,如父子进程。有名管道多用于没有关系的进程之间的通信。如何理解字节流:流里面的数据是没有格式的,读取的时候可以按照基本的数据类型的格式读取。管道的数据结构是一个环形的队列,是半双工的。...转载 2022-01-17 21:43:09 · 370 阅读 · 0 评论 -
2022-1-13 c++STL——算法、迭代器的分类
算法通过迭代器得到容器的某些特质,这样便能够找到最为高效的解决问题的方案。random_access_iterator_tag :array、vector、dequebidirectional_iterator_tag : List、Set / Multiset、Map /Multimap 、forward_iterator_tag : forward_listinput_iterator_tag :istreamoutput_iterator : ostreamhash_table 看具体.原创 2022-01-16 14:02:09 · 147 阅读 · 0 评论 -
2022-1-16 牛客C++项目 —— Linux多进程编程 —— waitpid函数
复习用的问题1、waitpid 函数介绍。从传入参数和返回值两个角度。2、当传入的参数为什么的时候,这个函数的功能和 wait()函数的功能一致。/*#include <sys/types.h>#include <sys/wait.h>pid_t waitpid(pid_t pid, int *wstatus, int options);功能:回收指定进程号的子进程,可以设置是否阻塞参数: pid: pid > 0 :某个子进程的 pid转载 2022-01-16 09:22:28 · 349 阅读 · 0 评论 -
2022-1-15 牛客C++项目——第二章 Linux 多进程开发
一、进程的的退出问题:为什么使用标准 C 库函数和使用 Linux 的系统函数最后会有两个截然不同的结果呢?exit()#include<stdio.h>#include<stdlib.h>#include<unistd.h>int main(void){ printf("hello\n"); printf("world"); exit(0); return 0;}C 语言的 IO 函数 printf 是有缓冲转载 2022-01-15 20:48:37 · 496 阅读 · 1 评论 -
2022-1-14 牛客C++项目 —— exec函数族学习
如果在父进程函数里面使用 exec 会有什么样的结果?有什么更好的做法?若执行成功,会造成exec函数之后的原先的进程调用的实体被新调用的进程实体替换掉,如果需要使用原先父进程之后的代码时没有可能的。更好的方法是创建一个子进程,然后在子进程里面执行exec函数,子进程本来就是父进程的 clone ,被替换掉也没啥损失。由下图可知,执行exec的时候将原先进程的用户区整个儿替换掉,之后再使用 a.out 的用户区接在原来进程的内核区上面。exec函数族有哪些函数?execl () 函数学习/.转载 2022-01-14 20:16:26 · 981 阅读 · 0 评论 -
2022-1-14牛客C++项目 —— 第二章 Linux多线程编程(gdb多进程调试)
复习所用的问题调试所使用的代码#include<stdio.h>#include<unistd.h>#include<sys/types.h>int main(void){ printf("begin.\n"); if(fork() > 0){ printf("i am parent process: pid = %d,ppid = %d\n",getpid(),getppid()); int i;转载 2022-01-14 10:32:34 · 188 阅读 · 0 评论 -
2022-1-13牛客网C++项目—— 第二章 Linux 多进程开发(一)
复习用的问题进程和程序之间的关系是什么?进程包含了哪些信息?一、程序当中包含了一系列的信息,这些信息用于描述如何创建一个进程。1)二进制格式标识:描述文件的格式,内核根据这个信息来解释文件中的其他的信息。(复习时候的补充:包括文件的创建信息和原信息啥的)(我猜测,文件的格式是和操作系统的类型适配的,必须使得内核能够读懂,)2)机器语言指令:(这个是不是编译好了直接拿来就可以执行的?没懂,再听一次)(是哒,可以直接交由 CPU 来执行)3)程序入口地址:程序开始执行的地方(和汇编语言当中需要用.s转载 2022-01-13 20:03:04 · 403 阅读 · 0 评论 -
2021-12-11牛客网C++项目——Linux编程介绍入门(二)
1.15 目录操作函数mkdir 函数/* #include <sys/stat.h> #include <sys/types.h> int mkdir(const char *pathname, mode_t mode); 作用:创建一个目录 参数:pathname 创建一个目录的路径 mode 权限(目录的权限和文件的权限有什么不同?) 目录的权限是转载 2021-12-20 10:10:15 · 276 阅读 · 1 评论 -
2021-12-1 map 、multimap 深度探索
set 不允许用户更改key,是通过将 key 的迭代器设置为 const,map 不允许用户更改 key ,是在构建底层的实现的时候将 key 设置为 const 。功能一致,都是将容器的第一个返回。multimap 不能通过 [ ] 号来进行增加。map 具有下标访问函数,存在对应的 key ,就直接返回 value,如果不存在对用的 key ,就创建一个,若没有 value ,就使用 default value。校招相关问题的补充:1、set 和 map 是怎么实现的?红黑树是怎么..原创 2021-12-19 11:08:52 · 241 阅读 · 0 评论 -
2021-11-25牛客网项目第一章——Linux系统编程入门
1.1Linux开发环境搭建1)Linux虚拟机的配置2)Xshell、Xftp、vscode与Linux虚拟机的连接1.2GCC1.3静态库的制作和使用静态库制作的全过程首先进入放置要制作成库的代码的原始文件。使用gcc编译得到编译后的文件。gcc -c add.c sub.c -I ../include/-I指定编译的时候在上搜索include引用的文件ar rcs libxxx.a xxx.o前面是库的名字,后面是一系列制作库所使用的文件参数大L是指定使用转载 2021-12-04 11:29:53 · 367 阅读 · 2 评论 -
2021-12-1 set 、multiset 深度探索
注意到,set 当中的 iterator 是 const,即不能通过 iterator 来修改迭代器,set 当中的元素是按照一定的规则来排列的,修改后会改变 set 的有序存储,所以一般不能修改。对于不同版本的 STL 都是通过 “得到引用,返回元素”的方式 来完成 identify 。...原创 2021-12-01 11:26:28 · 525 阅读 · 0 评论 -
2021-11-30 红黑树深度探索
红黑树是一种二叉平衡树,红和黑是用来表示节点的不同的状态。查找的时候使用二叉平衡树的中序遍历。建立一个红黑树需要五个参数:1)key2)value(key + data = value)3) keyofvalue ,规定通过 value 取得 key 的方式,具体在 map 和 set 有些不同。4) compare 自定义的排序规则,可以使用 functor 。5)默认分配器使用自定义红黑树来测试...原创 2021-11-30 11:08:07 · 233 阅读 · 0 评论 -
2021-11-19迭代器的设计原则和iterator Traits的作用与设计
iterator Traits 的作用是提取出 iteration 的五个性质:1)iterator_category 迭代器的种类,是否可以间隔跳跃,是单向前进还是两端都可以。2)value_type 容器所盛放的元素和种类3)different_type 表示两个迭代器之间的距离的数据类型,如果两个迭代器之间的距离超过了 different_type 所能够表示的数据范围,会导致一些问题(会导致什么我也不知道,感觉能够限制容器的大小)4)reference5)pointeriterator.原创 2021-11-28 11:34:07 · 139 阅读 · 0 评论