![](https://img-blog.csdnimg.cn/20201014180756918.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
Mr.Jcak
这个作者很懒,什么都没留下…
展开
-
C++模板函数只声明一种类型但输入两种类型参数
具体见代码:#include <iostream> using namespace std; template <typename T>void Swap(T& a, T& b){ T tmp = a; a = b; b = tmp;} int main(){ int a = 10; float b = 20; Swap(a, b); //自动推导调用 cout<<"ok"&原创 2021-09-18 09:16:45 · 672 阅读 · 0 评论 -
C++ 最小堆实现
#include <bits/stdc++.h>using namespace std;//[4,3,5,2,1]void tiao(vector<int>& v, int node, int leng){ int left,right; int Min; while(1){ left=node*2+1; //左节点 right=node*2+2; //右节点 if(left<leng).原创 2021-08-25 12:04:15 · 209 阅读 · 0 评论 -
C++获取多维数组维数
#include <iostream>using namespace std;int main(void) { int a[3][4]; cout<<sizeof(a)/sizeof(a[0])<<endl; //3 cout<<sizeof(a[0])/sizeof(a[0][0])<<endl; //4 return 0;}原创 2021-08-17 23:44:15 · 2015 阅读 · 1 评论 -
C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变
C++ 指向子类的指针转型为指向父类类型指针之后指向的对象地址不变例子:class A{ int a; int b;};class B:public A{ int c;};int main(){ B* p=new B(); cout<<p<<endl; cout<<static_cast<A*>(p)<<endl; return 0;}...原创 2021-08-13 16:15:01 · 269 阅读 · 0 评论 -
C++ priority_queue对链表节点建立小根堆
链表的节点为:struct ListNode { int val; ListNode *next; ListNode() : val(0), next(nullptr) {} ListNode(int x) : val(x), next(nullptr) {} ListNode(int x, ListNode *next) : val(x), next(next) {} };首先对链表节点建立一个结构体,结构体包含节点和节点的val值原创 2021-08-11 23:49:31 · 457 阅读 · 0 评论 -
C++ set insert的返回值
pair<iterator,bool> insert (const value_type& val);返回布尔对以表示是否发生插入,并返回指向新插入元素的迭代器。原创 2021-08-09 21:26:49 · 3121 阅读 · 0 评论 -
C++万能头文件
<bits/stdc++.h>包含了全部的C++头文件原创 2021-08-08 17:12:27 · 1120 阅读 · 0 评论 -
C++构建二叉树
首先定义树的节点:struct BinaryTreeNode { int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_pRight; };定义构建节点和连接节点的方法:BinaryTreeNode* CreateBinaryTreeNode(int value){ BinaryTreeNode* pNode = new B原创 2021-08-06 00:20:52 · 1319 阅读 · 0 评论 -
C++打印浮点数时保留两位小数
int main() { printf("%.2f",2.356); //2.36,以四舍五入方式保留小数 return 0;}原创 2021-08-01 22:56:57 · 3484 阅读 · 0 评论 -
printf打印百分号%
在要打印的%之前添加多一个%int main() { printf("%f%%",2.3); return 0;}打印:2.300000%原创 2021-08-01 22:54:22 · 1698 阅读 · 0 评论 -
C++ lower_bound和upper_bound的区别
lower_bound( begin,end,num):返回第一个大于等于参数num的迭代器upper_bound( begin,end,num):返回第一个大于参数num的迭代器>= 和> 是二者的区别原创 2021-08-01 22:49:04 · 202 阅读 · 0 评论 -
C++中set和map的erase用法
删除容器中值为 val 的元素size_type erase (const value_type& val);删除 it迭代器指向的元素iterator erase (const_iterator it);删除 [first,last) 区间内的所有元素iterator erase (const_iterator first, const_iterator last);...原创 2021-08-01 22:33:16 · 610 阅读 · 0 评论 -
C++ swap用法
swap用于交换两个元素的值template<class T>void swap(T &a,T &b){ T c(a); a=b; b=c;}例如交换两个int型变量的值:#include <iostream>using namespace std;int main() { int a=1,b=2; swap(a,b); cout<<a<<" "<<b<<end.原创 2021-08-01 22:27:17 · 16479 阅读 · 0 评论 -
lock_guard源码
template<typename Mutex>class lock_guard{private: Mutex& m; explicit lock_guard(lock_guard&); lock_guard& operator=(lock_guard&);public: explicit lock_guard(Mutex& m_) : m(m_) { m.lock();.原创 2021-07-29 17:38:27 · 480 阅读 · 0 评论 -
优先队列priority_queue自定义比较函数
以一个例子进行说明,假设优先队列的每个元素是pair<int,int>,我需要自定义一个用于pair<int,int>比较的函数:decltype返回该变量的类型bool cmp(pair<int,int>& a, pair<int,int>& b){ return a.second>b.second;}priority_queue<pair<int,int>,vector<pair<原创 2021-07-25 16:07:07 · 879 阅读 · 1 评论 -
重载,重写,隐藏
重载:在同一个类中,函数名相同,参数个数不同或参数类型不同,重载不关心函数返回类型隐藏:子类和父类中存在同名函数,注意只要求函数同名,不管参数列表是否相同,基类函数都会被隐藏重写,也称覆盖:基类和子类函数名,参数列表,返回值类型相同的函数,且基类中的函数带有virtual装饰...原创 2021-07-22 00:00:27 · 135 阅读 · 0 评论 -
将x的二进制最后一位置为0
对于任意整数x,x&(x−1),该运算将x的二进制表示的最后一个1变成0原创 2021-07-19 23:12:27 · 760 阅读 · 1 评论 -
c++ vector用另一个vector初始化
vector<int> a(nums.begin(), nums.end());注意:vector<int> a(nums.begin()+1, nums.end()-2);中a包含nums.begin()+1,不包含nums.end()-2,也就是包含的区间是左闭右开区间原创 2021-07-13 00:17:37 · 3878 阅读 · 0 评论 -
虚函数表存放在哪
一个类只能有一个虚函数表。在编译时,一个类的虚函数表就确定了,所以虚函数表在 .rodata ( Linux g++ )原创 2021-07-11 14:09:15 · 411 阅读 · 0 评论 -
priority_queue实现大顶堆和小顶堆
小顶堆priority_queue <int,vector<int>,greater<int> > q;大顶堆priority_queue <int,vector<int>,less<int> >q;优先队列支持的操作:top 访问队头元素 empty 队列是否为空 size 返回队列内元素个数 push 插入元素到队尾 (并排序) emplace 原地构造一个元素并插入队列 pop 弹出队.原创 2021-07-08 23:51:44 · 548 阅读 · 0 评论 -
野指针和悬空指针
野指针就是没有被初始化过的指针;悬空指针是指针最初指向的内存已经被释放了的一种指针原创 2021-06-20 15:03:29 · 212 阅读 · 0 评论 -
C++vector的reserve和resize比原来的容量小
vector的resize()函数的作用是改变vector元素个数reverse()函数的作用是改变容量如果n的大小比vector的容量小。容量没有变化。size也没有变。原创 2021-06-20 12:55:25 · 1441 阅读 · 0 评论 -
error: reference to non-static member function must be called sort(nums.begin(),nums.end(),cmp1)
leetcode179题中编译出现则个问题出错的代码:class Solution {public: bool cmp1(const int& a, const int& b){ string s1=to_string(a); string s2=to_string(b); string ans1=s1.append(s2); string ans2=s2.append(s1); return原创 2021-05-04 22:05:22 · 1047 阅读 · 2 评论 -
C++字母转大小写
大小写字母转化:转化为大写:toupper()转化为小写:tolower()原创 2021-04-14 23:16:07 · 185 阅读 · 0 评论 -
C++判断字符是字母或数字
判断字符是字母:isdigit()判断字符是数字:isalpha()判断字符是字母或数字:isalnum()原创 2021-04-14 23:15:13 · 1109 阅读 · 0 评论 -
C++ 多继承中的多义性
如果一个子类继承多个基类,这多个基类都有一个相同的函数,那么子类调用这个相同的函数就会产生多义性,编译就不能通过:class base1{public: virtual void fun1(){ cout << "1" << endl; }};class base2{public: virtual void fun1(){ cout << "2" << endl; }};class base3{public: virtual void原创 2021-04-09 13:28:27 · 158 阅读 · 0 评论 -
带虚函数的类的sizeof分析
一个类中若有虚函数,(不论是自己的虚函数,还是继承而来的),那么类中就有一个成员变量:虚函数指针。虚函数指针占4字节直接看例子:class base1{private: int a;public: virtual void fun1(){} virtual void fun2(){}};class base2{public: virtual void fun1(){} virtual void fun2(){}};int main(){ cout << s原创 2021-04-09 13:09:47 · 753 阅读 · 0 评论 -
C++ multimap遍历
#include<iostream>#include<map>using namespace std;int main(){ multimap<int, int> mm; mm.insert({ 1, 1 }); mm.insert({ 1, 2 }); mm.insert({ 1, 3 }); mm.insert({ 5, 6 }); mm.insert({ 7, 8 }); multimap<int, int>::iterator.原创 2021-04-07 23:19:35 · 1570 阅读 · 0 评论 -
C++ multimap查找某一个键的所有键值对
利用lower_bound返回查找结果第一个迭代器;upper_bound返回最后一个查找结果的下一个位置的迭代器#include<iostream>#include<map>using namespace std;int main(){ multimap<int, int> mm; mm.insert({ 1, 1 }); mm.insert({ 1, 2 }); mm.insert({ 1, 3 }); mm.insert({ 5, 6 })原创 2021-04-07 23:17:58 · 1150 阅读 · 0 评论 -
C++ multimap的插入
不同于map,multimap不能使用中括号[]法插入,multimap插入的一种简单做法是:multimap.insert({key, value})int main(){ multimap<int, int> mm; mm.insert({ 1, 2 }); mm.insert({ 1, 2 }); mm.insert({ 1, 3 }); mm.insert({ 5, 6 }); mm.insert({ 7, 8 }); for (auto itr = mm.be原创 2021-04-07 23:12:51 · 1632 阅读 · 0 评论 -
C++ istringstream重新绑定和处理另一个字符串
当我们用istringstream处理完一个字符串后,如果想接着处理另外一个字符串,要首先对该istringstream调用clear()方法,才能接着绑定下一个字符串看个例子:#include<iostream>#include<string>#include<sstream>using namespace std;int main(){ int num; string s, w; s = "ab cd ef"; istringstream原创 2021-03-31 22:15:49 · 648 阅读 · 0 评论 -
C++输入一个整数后接着输入字符串
当我们输入整数,按回车,实际上输入的是:整数和换行符号(\n)。cin把整数读进了,但是换行符号没有读,因此如果接下来输入字符串,即使用cin.getline,首先会读入\n。然后就直接结束了。下面这个程序需要输入四个字符串并把它们打印出来,可以看到输入三条字符串之后就结束了。#include<iostream>#include<string>using namespace std;int main(){ int num; string s, w; cin原创 2021-03-31 22:03:48 · 3462 阅读 · 1 评论 -
C++ auto_ptr存在的问题
原创 2021-03-28 09:42:57 · 564 阅读 · 0 评论 -
C++char转int和int转char
区别在于+'0'还是-'0'char转int:-'0'int main(){ char c = '5'; int n = c - '0'; cout << n << endl; return 0;}int转char:+'0'int main(){ int n = 5; char c = n+'0'; cout << c << endl; return 0;}原创 2021-03-27 11:15:06 · 600 阅读 · 0 评论 -
C++ 字符串转数字/数字转字符串
数字转字符串:很简单,直接用to_string()函数int num=to_string(num)字符串转数字:sscanf(s.c_str(), "%d", &num);int main(){ string s = "234"; int num; sscanf(s.c_str(), "%d", &num); cout << num << endl; s = "567"; sscanf(s.c_str(), "%d", &原创 2021-03-27 11:12:04 · 270 阅读 · 0 评论 -
C++ vector的反向迭代器
int main(){ vector<int> a = { 1, 2, 3 }; vector<int>::reverse_iterator it = a.rbegin(); for (; it != a.rend(); ++it){ cout << *it << endl; } return 0;}原创 2021-03-26 11:40:13 · 1080 阅读 · 0 评论 -
C++ const vector的迭代器
vector<int>::const_iterator it = a.begin();int main(){ const vector<int> a = { 1, 2, 3 }; vector<int>::const_iterator it = a.begin(); for (; it != a.end(); ++it){ cout << *it << endl; } return 0;}原创 2021-03-26 11:38:44 · 733 阅读 · 0 评论 -
C++返回char*第n个位置开始的子字符串
int main(){ int n = 3; char* c = "abcdeffffff"; char *temp = c+n; cout << temp << endl; return 0;}原创 2021-03-26 11:25:09 · 1033 阅读 · 0 评论 -
C++大小写字母互转
大写字母的ASCII码比小写字母的小,且两者相差32,所以要将大写字母转为小写字母,将大写字母+32,反之,要将小写字母转为大写字母,小写字母-32int main(){ char c = 'A'; char c2 = c + 32; cout << c2 << endl; return 0;}...原创 2021-03-24 23:53:00 · 4266 阅读 · 0 评论 -
C++中的深拷贝
memcmp (const void*, const void*, size_t)第一个参数:目的地址第二个参数:源地址第三个参数:所需要复制的字节数原创 2021-03-23 11:01:30 · 220 阅读 · 0 评论