
c++
C++基础知识相关文章
CrazyFox%
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
vscode运行c++程序如何支持c++11
参考https://zhuanlan.zhihu.com/p/269244754。更改setting.json文件。原创 2023-11-25 16:12:19 · 558 阅读 · 0 评论 -
大话设计模式C++实现
详情见Github:https://github.com/liubamboo/BigTalkDesignPattern。大话设计模式,讲得非常好,但是作者是用C#写的,为了方便C++程序员,使用C++写了大话设计模式的代码。原创 2023-11-24 10:03:14 · 535 阅读 · 0 评论 -
C++ Primer第16章——模版与泛型编程
面向对象编程能处理再程序运行之前都未知的情况,而在泛型编程中,在编译时就能获知类型了。C++中的容器、迭代器和算法都是泛型编程的例子;一个模板就是一个创建类或者函数的蓝图或者说公式。模版是泛型编程的基础。原创 2023-11-15 16:58:37 · 119 阅读 · 0 评论 -
C++11 14新特性
1.原子弹级更新——Variadic Templates含义:数量不定的模板参数,模板使得类型可以任意指定,而Variadic Templates进一步让模板参数的数量也可以任意指定注意:pack的模板参数数量可以为0;需要定义终止条件用途:比如实现print函数,可以打印任意数量的,任意类型的数据 还可以方便地实现递归函数,比如hash_val的计算 可以实现递归继承,比如实现tuple(可以将不同类型,任意数量的数据存在一起)...原创 2021-08-25 21:41:23 · 721 阅读 · 3 评论 -
push_back和emplace_back区别
1. 测试代码#include <iostream>#include <vector>using namespace std;class A { public: A(int i, int j) : i_(i), j_(j){ cout << "normal construct function" << endl; } A(const A& a) { cout << "copy construct原创 2021-08-25 12:39:38 · 2991 阅读 · 0 评论 -
C++ Concurrency IN ACTION Chapter 1--Hello, world of concurrency in C++
1. 什么是并发在计算机中,并发是指单个系统并行运行多个独立的活动,而不是一个接着一个的顺序执行。任务切换与硬件并发:任务切换是指单核系统通过划分时间片来模拟并发,而硬件并发是指多核系统实现真正意义上的并行,但是在多核系统上也会用到任务切换。上下文切换:存储当前运行任务的CPU状态和寄存器状态,然后切换到要执行的任务,之后通过加载存储的状态恢复之前的任务。这有一定的时间开销。2. 并发的方法2.1 多进程并发划分任务到多个单线程的进程中。缺点:由于操作系统有很多保护,多进原创 2021-08-22 09:44:40 · 155 阅读 · 0 评论 -
动态规划核心算法题(c++)
1. 0-1背包0-1背包升级版2. 三角形中最短路径leetcode题目链接原创 2021-08-12 10:11:43 · 133 阅读 · 0 评论 -
回溯算法题目总结(c++)
1. 八皇后2. 0-1背包可以使用回溯,虽然不是最好的解决办法2.2 0-1背包改造版3. 正则表达式4. 深度优先搜索5. 图的着色6. 旅行商问题7. 数独8. 全排列原创 2021-08-11 16:40:36 · 385 阅读 · 0 评论 -
c++手写string类
string类是带指针的类,所以一些基础函数的定义要特别注意,很考验功底0. 类声明含数据成员1. 普通构造函数2. 拷贝构造函数3. 拷贝赋值运算符4. 析构函数5. 移动构造函数6. 移动赋值运算符...原创 2021-08-11 15:16:17 · 1574 阅读 · 0 评论 -
分治算法总结(c++)
0. 算法总结分治算法用四个字概括就是“分而治之”,将原问题划分成 n 个规模较小而结构与原问题相似的子问题,递归地解决这些子问题,然后再合并其结果,就得到原问题的解。1. 逆序度求解leetcode题目2.二维平面上有 n 个点,如何快速计算出两个距离最近的点对?3.有两个 n*n 的矩阵 A,B,如何快速求解两个矩阵的乘积 C=A*B?...原创 2021-08-10 17:22:58 · 512 阅读 · 0 评论 -
c++输入输出总结
1. 输入: 1 2 3 4 5#include <bits/stdc++.h>using namespace std;int main() { // 输入:1 2 3 4 5 string item; while (cin >> item) { cout << item << " "; if (getchar() == '\n') break; } return 0;}原创 2021-08-06 18:35:32 · 395 阅读 · 0 评论 -
字符串匹配算法(leetcode)
一. 基本题目leetcode 28 easy1. BF算法(暴力匹配)class Solution {public: int strStr(string haystack, string needle) { // 0.异常处理 if (0 == needle.size()) return 0; // 1.初始化准备 int m = haystack.size(); int n = needle.size原创 2021-08-06 10:58:43 · 759 阅读 · 0 评论 -
贪心算法leetcode重点题目
1. 分饼干leetcode 455 easy思路:每次优先满足胃口最小的孩子(因为目的是尽量满足越多的孩子,只和数量有关);而且在满足孩子胃口的前提下,尽量用尺寸最小的饼干(因为结果相同)具体实现:每次都有找最小值,可以使用优先队列,注意是小顶堆(需要更改比较函数)class Solution {public: int findContentChildren(vector<int>& g, vector<int>& s) {原创 2021-08-06 10:23:51 · 97 阅读 · 0 评论 -
huffman(霍夫曼编码)
1. 基本思想按照字符出现的频率编码,比如有3个字符,就可以用2个比特来表示,不过随着字符数量的增加,比特数也会增加,有可能会浪费空间,所以进一步用更少的比特表示频率更高的字符,用更多的比特表示频率更低的字符,但是这样会有一个问题是再解码时不知道到底要对多少个字符进行解码,所以进一步引出霍夫曼编码,通过构建二叉树,从频率最小的字符开始,结点值为字符出现的频率,先将所有频率对应一个结点放入队列中,每次取出最小的2个合并,将合并的结点加入队列,重复这个过程,直到队列为空,最终编码的时候左子树编码为0,右子树原创 2021-08-05 16:35:57 · 504 阅读 · 0 评论 -
图核心算法(c++)
1. 图的遍历leetcode207这道题对应拓扑排序,有向图是否有环的问题1.1 BFS(广度优先搜索)第一次做法class Solution {public: bool canFinish(int numCourses, vector<vector<int>>& prerequisites) { // 0.初始化准备 unordered_set<int> temp; vector&原创 2021-08-04 10:45:07 · 292 阅读 · 0 评论 -
堆核心算法(c++)
以数组存放,下标从0开始,大顶堆为例1. 堆化(往堆中插入一个元素)// 大顶堆,数组存放数据,从0开始存放数据class Heap {private: vector<int> data; int count; //堆中已存储的数据个数public: Heap(int capacity) : data(vector<int>(capacity)), count(0) { } void insert(int in) { .原创 2021-08-02 10:50:57 · 257 阅读 · 0 评论 -
二叉树核心算法题(c++)
一、二叉树的遍历1.前序遍历144题/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; * TreeNode *right; * TreeNode() : val(0), left(nullptr), right(nullptr) {} * TreeNode(int x) : val(x), left(nullpt原创 2021-07-31 19:18:42 · 196 阅读 · 0 评论 -
哈希算法核心算法题(c++)
1. 手写LRU缓存淘汰算法leetcode题目原创 2021-07-30 14:53:17 · 189 阅读 · 0 评论 -
二分查找核心算法(c++)
1. 基本原理1.1 循环实现/** * @brief 循环实现二分查找 * @param nums 数据 * @param target 查找目标 * @return 找到目标则返回下标,否则返回-1 */int BSearch(const vector<int> &nums, int target) { int low = 0; int high = nums.size() - 1; while (low <= high)原创 2021-07-28 15:03:53 · 294 阅读 · 0 评论 -
排序核心算法(c++)
一、平均时间复杂度为O(n^2)的算法1. 冒泡排序void BubbleSort(vector<int> &data) { // 1 辅助变量 bool flag; //若某一次循环不需要交换说明已经完全有序,提前结束 int tmp; // 2 正式排序 for (int i=1; i<data.size(); ++i) { flag = true; for (int j=0; j<data原创 2021-07-23 15:19:02 · 361 阅读 · 0 评论 -
递归核心算法题(c++)
1. 链表两数相加https://leetcode-cn.com/problems/add-two-numbers/思路:可以将大问题分解为子问题,子问题和大问题逻辑相同只是规模不同, 存在终止条件,也就是当前结点都为空且进位为0时, 可以使用递归终止条件:当前结点都为空且进位为0时递推公式:int new_val = (val1 + val2 + carry) % 10;carry = (val1 + val2 + carry) / 10;ListNode* curr = new原创 2021-07-22 17:18:02 · 284 阅读 · 0 评论 -
队列核心算法(c++)
1. 用两个栈实现队列https://leetcode-cn.com/problems/yong-liang-ge-zhan-shi-xian-dui-lie-lcof/思路:进队由第一个栈控制, 出栈时由第二个栈控制,若出栈时第二个栈为空则将第一个栈元素转移过来,若两个都为空则返回-1class CQueue {private: stack<int> stk1; stack<int> stk2;public: CQueue() {原创 2021-07-22 15:31:58 · 106 阅读 · 0 评论 -
栈-核心基础算法题总结(c++)
目录1. 有效的括号2. 最小栈3. 回文链表1. 有效的括号https://leetcode-cn.com/problems/valid-parentheses/思路:栈, 左括号进,右括号出class Solution {public: bool isValid(string s) { // 1.初始化准备 stack<char> stk; unordered_map<char, char>.原创 2021-07-19 11:24:09 · 191 阅读 · 1 评论 -
链表核心算法-c++程序
1. 反转链表1.1 版本1/** * @file main.cpp * @author Crazyfox * @brief 反转链表 * @version 1.0 * @history * 1.Date: 2021-07-15 * Version: 1.0 * Modification: First release * @copyright Copyright (c) 2021 * */#include <iostream>#includ原创 2021-07-15 20:46:20 · 119 阅读 · 0 评论 -
c语言或c++读取一组数字/输入创建链表/遍历打印链表/
一 c语言实现/** * @file CreateList.cpp * @author Crazyfox * @brief c语言实现链表创建 * @version 1.0 * @history * 1.Date: 2021-07-15 * Version: 1.0 * Modification: First release * @copyright Copyright (c) 2021 * */#include <stdio.h>#inclu原创 2021-07-15 19:51:10 · 775 阅读 · 0 评论 -
C++面试准备汇总
1、多态、虚函数原理、纯虚函数、析构函数可以使用虚函数吗?答:(1)分为编译时多态(编译时就确定),比如函数重载就是这种情况,通过参数类型或数量不同可以实现;还有运行时多态(运行时才确定),使用虚函数机制,可以通过父类指针来调用派生类的函数,(2)具体实现机制是每个对象存在一个虚函数表,调用函数时会通过这个虚函数表去查询具体需要调用哪个版本的函数;(3)纯虚函数是指基类没有提供函数的定义需要派生类自行实现,普通虚函数时基类存在一个版本的函数(4)对于存在派生关系的类的析构函数应该使用虚函数,因为这原创 2020-09-13 09:26:38 · 1330 阅读 · 0 评论 -
leetcode初级算法
leetcode初级算法1 数组1.1 删除排序数组中的重复项1 数组1.1 删除排序数组中的重复项题目:给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并使用O(1)的额外空间完成题目。示例:给定数组nums=[0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度5,并且原数组的前五个元素被修改为0,1,2,3,4。你不需要考虑数组中超出新长度后面的元素。数组通过引用传递。题解:可以使用快原创 2021-02-06 22:33:04 · 120 阅读 · 0 评论 -
C++ Primer第5章学习笔记
语句5.1 简单语句5.2 语句作用域5.3 条件语句5.3.1 if语句5.3.2 switch语句5.1 简单语句5.2 语句作用域答:(a)错误,while判断语句中使用初始化,会使得iter一直是初始值,从而可能导致死循环,应该改为:string::iterator iter = s.begin();while(iter != s.end()){/* ++iter /}(b) 错误,status初始化应该放在外面,否则if的判断语句无法访问status,应该改为bool status原创 2020-07-07 20:11:13 · 290 阅读 · 0 评论 -
字符串的排列
字符串的排列1、字符的全排列2、C++——set涉及知识包括了字符的全排列和set容器的使用1、字符的全排列参考:https://www.jianshu.com/p/621fb1bccd1c可以用递归三部曲完成:(1)确定边界条件:当固定到字符串最后一个索引位置时,保存或者输出字符串,完成一次排列(2)当前递归返回什么?不需要返回值(3)当前递归做什么?循环遍历固定当前索引的字符,使用交换完成操作,如果字符被交换到当前索引位置,就是说当前索引位置被固定了,继续固定下一个索引位置,在循环体内交原创 2020-07-05 17:59:27 · 227 阅读 · 0 评论 -
C++ Primer第3章学习笔记
字符串、向量和数组3.1 命名空间的using声明3.2 标准库类型string3.2.1 定义和初始化string对象3.2.2 string对象上的操作3.1 命名空间的using声明头文件不应包含using声明符、以免程序产生始料未及的名字冲突3.2 标准库类型string3.2.1 定义和初始化string对象如果用=初始化一个变量,实际上执行的是拷贝初始化,编译器把等号右侧的初始值拷贝到新创建的对象中去;与之相反,如果不使用等号,则执行的是直接初始化。当初始值只有一个时,使用两种初始化都原创 2020-06-30 21:02:50 · 150 阅读 · 0 评论 -
Primer C++第二章学习笔记
Primer C++第二章学习笔记2.1 基本内置类型2.1.1 算术类型2.1.2 类型转换2.1.3 字面值常量2.2 变量2.3 复合类型2.4 const限定符2.5 处理类型2.6 自定义数据结构数据类型决定了程序中数据和操作的意义2.1 基本内置类型2.1.1 算术类型C++定义了一套包括算术类型和空类型在内的基本数据类型,其中包含了字符、整型数、布尔值和浮点数。空类型应用与一些特殊的场景。类型决定了数据所占的比特数以及该如何解释这些比特的内容。带符号类型和无符号类型类型原创 2020-06-27 17:12:29 · 269 阅读 · 0 评论