C++ STL常用函数——leetcode刷题
STL常用容器 容器分类 顺序(序列式)容器: vector:采用线性连续空间,类似于数组; deque:双向开口的连续线性空间,随机存取,双端队列; list:双向循环链表; slist:单向链表; array:固定数组,vector的底层即为 array数组。 关联式容器: set(集合)和 map(映射):都是以红黑树作为底层结构。set不可重复,mutliset可重复;map不可重复,mutlimap可重复; hash_set(unordered_set)和 hash_map(unordered_map):是基于哈希表实现的,查询时间复杂度为O(1)。 容器适配器: stack:以 deque为底部结构并封闭其头端开口形成的; queue:单端队列,由 deque实现; pirority_queue:优先队列,类似于堆,基于 vector容器实现的。 1. string 查找和替换 123int find(const string& str, int pos = 0) const;...
C++面试八股文--参考C++ Primer目录
第 1 章 C++ 基础 主要内容:基本类型、字符串、向量和数组、表达式、语句、函数(缺省函数、函数重载、内联函数)、引用。 32位和64位系统对 C++ 结构体大小的影响 1. 基本数据类型的大小差异 在 32 位和 64 位系统中,部分基本数据类型的大小是固定不变的,但有些会发生变化。long和指针数据类型在32位系统占4字节,在64位系统占8字节。 2....
一文了解程序编译cmake命令
CMake快速学习 只有一个源文件的程序编译 首先在当前目录下创建两个文件,源文件hello.cpp和cmake文件CMakeLists.txt; 123456# cmake最低版本要求2.8cmake_minimum_required (VERSION 2.8)# 本项目的工程名project (learn_cmake)# 要生成的可执行文件名为hello,后面的参数是需要的依赖add_executable(hello hello.cpp) 接着在当前目录下执行cmake .; 接着会发现目录下多生成了一些文件,例如Makefile等; 然后使用GNU make来编译程序,即输入make命令; 此时会发现已生成可执行程序,输入./hello就可以正常执行, 同一目录下多个源文件 此时在当前目录新增两个源文件,只需要在CMakeLists.txt中添加所依赖的.cpp文件如add_executable(hello hello.cpp...
一文学习Linux系统下GDB调试
GDB调试命令 如何进入gdb模式 形成可执行程序 在linux下使用gcc/g++、makefile或CMake形成可执行程序时,需要加上-g选项,即程序发布的debug模式;如果不加该选项就默认是release模式; 如果要进入gdb开始调试,那直接gdb + 可执行程序名即可。 GDB操作指令 行号显示(list) l 行号/函数名表示显示包含该行或该函数的10行代码。 l 表示列出该源文件中的随机10行内容; l 0或l 1 表示从从第一行开始往下显示10行的内容; l m 表示显示包含第m行的10行代码; l 函数名 表示显示函数名的前后10行代码; l m,n 表示显示从第m行到第n行的代码。 断点设置(break) b 行号 表示在该行打断点; b 源文件:行号 表示在该源文件中的这行加上一个断点; b 源文件:函数名 表示在该函数的第一行打上断点。 查看断点信息 info 表示查看所有的调试信息; info b 表示查看所有断点的信息; 断点的字段信息: Num —— 编号 Type —— 类型 Disp —— 状态 Enb ——...
一文学习Git基础命令
Git基础命令 安装 在Linux上安装 1sudo apt-get install git 在Windows上安装:下载git程序 安装完设置,在命令行输入 12git config --global user.name "Your Name"git config --global user.email "[email protected]" 创建版本库 创建空目录 123mkdir learngitcd learngitpwd 将目录变成git仓库 1git init 把文件添加到版本库 1234567#1.创建并编写文件touch 文件名vim 文件名#2.暂存文件,将文件放入暂存区。git add 文件名#3.提交更新,找到暂存区的文件,存储到Git仓库。git commit -m "本次提交的说明" 版本回退 查看当前版本状态 要随时掌握工作区的状态,使用git status命令。 如果git status告诉你有文件被修改过,用git diff可以查看修改内容。 版本回退 git...
Linux基础命令
Linux基础命令 ls命令 功能:列出文件夹信息 语法:ls [-l -h -a] [参数] 参数:被查看的文件夹,不提供参数,表示查看当前工作目录 -l,以列表形式查看 -h,配合-l,以更加人性化的方式显示文件大小 -a,显示隐藏文件 pwd命令 功能:展示当前工作目录 语法:pwd cd命令 功能:切换工作目录 语法:cd...
C++的ACM模式输出入
C++常用的输入方法 在C++语言中,标准输入操作需要包含头文件 <iostream>。 1. cin cin可以连续从键盘读取多个数据,直到遇到分隔符(空格、Tab键和换行符)为止。 2. getline() 当我们需要读取包含空格的字符串时,cin读不全整个字符串。此时,可以使用getline()函数来解决问题。 使用getline()函数时,需要包含头文件<string>。getline()函数会读取整行内容,包括空格字符,直到遇到换行符为止。 函数原型:getline(istream& is, string& str, char delim); (1)is是输入流,这里是 cin,表示从标准输入流中读取数据。 (2)str是存储读取结果的字符串。 (3)delim是分隔符,即当读取到这个字符时,getline函数停止读取。 getline(cin,s);没有提供第三个参数(分隔符),以此该句的作用是从标准输入中读取一行文本,将其存储在字符串...
Python的ACM模式输出入
输入 1. 单行输入多个整数 12nums = list(map(int, input().split()))print(sum(nums)) 2.多行输入(行数n未知) 12345678910111213# 方法1while True: try: nums = list(map(int, input().split())) print(sum(nums)) except EOFError: break# 方法2import sysfor line in sys.stdin: nums = list(map(int, line.split())) print(sum(nums)) 3.多行输入(行数n已知) 1234t = int(input())for _ in range(t): nums = list(map(int, input().split())) print(sum(nums)) 4. 多个测试用例,每个测试用例包含多行数据 123456t = int(input())for _ in...
常用设计模式讲解
单例设计模式 ⭐ 定义 单例模式是一种创建型设计模式,它的核心思想是保证一个类只有一个实例,并提供一个全局访问点来访问这个实例。 优点 1.全局控制:保证只有一个实例,这样就可以严格的控制客户怎样访问它以及何时访问它,简单的说就是对唯一实例的受控访问。 2. 节省资源:也正是因为只有一个实例存在,就避免多次创建了相同的对象,从而节省了系统资源,而且多个模块还可以通过单例实例共享数据。 3. 懒加载:单例模式可以实现懒加载,只有在需要时才进行实例化,这无疑会提高程序的性能。 基本要求(规则) 私有的构造函数:防止外部代码直接创建类的实例。 私有的静态实例变量:保存该类的唯一实例。 公有的静态方法:通过公有的静态方法来获取类的实例。 种类 饿汉模式 不管是否需要使用这个实例,直接先创建好实例,然后当需要使用的时候,直接调方法就可以使用了。 1234567891011121314151617class Singleton{private: // 静态成员变量在类加载时初始化 static Singleton...
常见手撕算子——一维数组的softmax
SoftMax Softmax 的 CPU 和 CUDA 写法均是高频考察。面试时有可能会让任选一种写法进行书写,此时自己可以先写 CPU(C++、Python) 版本,然后再写 CUDA 版本。 Softmax公式如下:softmax(xi)=exi∑jexjsoftmax(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}} softmax(xi)=∑jexjexi 一般为了避免溢出,需要减去最大值,所以通常采用下面这个公式:softmax(xi)=exi−max(x)∑jexj−max(x)softmax(x_i) = \frac{e^{x_i - max(x)}}{\sum_j e^{x_j - max(x)}} softmax(xi)=∑jexj−max(x)exi−max(x) 1. CPU(C++、Python) 版本 1234567891011void softmax(float* input, float* output, int N){ float max_value =...