- 博客(53)
- 收藏
- 关注
原创 C++ inline 变量
今天写力扣用记忆化搜索,想只创建一次数组,因为OJ 跑多个样例的时候 是通过创建多个实例来跑的,让这多个实例访问的 都是同一个 数组的话需要用到inline变量,通过现学了解到inline 变量时c++17新特性,可以实现只创建一次,让多个实例访问同一个数组。如:static inline int f[210][210];...
2021-11-12 15:21:42 898 1
原创 C++ memset函数
void *memset(void *s, int ch, size_t n);函数解释:将s中当前位置后面的n个字节 (typedef unsigned int size_t )用 ch 替换并返回 s 。memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法memset函数按字节对内存块进行初始化,memset(void *s, int ch,size_t n);中ch实际范围应该在0~~255,因为该函数只能取ch的后八位赋值给你所输入的范围的每个
2021-11-06 11:03:20 798
原创 Effective C++ 笔记(九)
九:杂项讨论条款53:不要忽视编译器的警告请记住:严肃对待编译器发出的警告信息。努力在你的编译器的最高警告级别下争取“无任何警告”的荣誉。不要过度依赖编译器的报警能力,因为不同的编译器对待事情的态度并不相同。一旦移植到另一个编译器上,你原本依赖的警告信息有可能消失。条款54:让自己熟悉包括TR1在内的标准程序库请记住:1.C++标准程序的主要机能是由STL、iostreams、locales组成,并包含C99标准程序库;2.TR1添加了诸如智能指针、一般化函数指针、哈希容器、正则表达式及其他10
2021-11-04 17:35:40 394
原创 Effective C++ 笔记(八)
八:定制new和delete(待完善)条款49:了解new-handler的行为请记住:1.set_new_handler允许客户指定一个函数,在内存分配无法获得满足时被调用。2.Nothrow new是一个颇为局限的工具,因为他只适用于内存分配;后继的构造函数调用还是可能抛出异常。条款50:了解new和delete的合理替换时机请记住:有许多理由需要写个自定的new和delete,包括改善效能、对heap运用错误进行调试、收集heap使用信息。条款51:编写new和delete时需固守常规请
2021-11-04 17:22:52 97
原创 Effective C++ 笔记 (七)
七:模板与泛型编程条款41:了解隐式接口和编译期多态面向对象编程总是以显式接口和运行期多态解决问题。Templates及泛型编程与面向对象有根本上的不同,显式接口和运行期多态仍然存在,但重要性降低。反倒是隐式接口和编译期多态更重要。什么是显式接口,运行期多态,隐式接口,编译期多态?看下面这个例子class Widget{public: Widget(); virtual ~Widget(); virtual std::size_t size() const; vir
2021-11-04 17:10:37 543
原创 Effective C++ 笔记(六)
六:继承与面向对象设计条款32:确定你的public继承塑模出is-a关系如果你令class B(派生类)以public形式继承class A(父类),你便是告诉C++编译器说,每一个类型为D的对象同时也是一个类型为B的对象。请记住:“public继承”意味is-a。适用于base classes身上的每一件事情一定也适用于derived class身上,因为每一个derived class 对象也都是一个base class 对象。条款33:避免遮掩继承而来的名称class Base{priv
2021-11-03 17:04:46 236
原创 Effective C++ 笔记(五)
五:实现条款26:尽可能延后变量定义式的出现时间"尽可能延后"的真正意义:不只应该延后变量的定义,直到非得使用该变量的前一刻为止,甚至应该尝试延后这份定义直到能够给它初值实参为止。如果这样,不仅能够避免构造(和析构)非必要对象,还可以避免无意义的default构造函数。更深一层说,以“具明显意义之初值”将变量初始化,还可以附带说明变量的目的。//伪代码,说明“能够避免构造(和析构)非必要对象“void A(){ string str; if(....){ throw(...); } ..
2021-10-30 16:38:15 116
原创 Effective C++ 笔记(四)
四:设计与声明条款18:让接口容易被正确使用,不易被误用请记住:1.好的接口很容易被正确使用,不容易被误用。你应该在你的所有接口中努力达到这些性质。2.“促进正确使用”的办法包括接口的一致性,以及与内置类型的行为兼容。3.“阻止误用”的办法包括建立新类型、限制类型上的操作,束缚对象值,以及消除客户的资源管理责任。4.tr1::shared_ptr支持定制型删除器。这可防范DLL问题,可被用来自动解除互斥锁等等。条款19:设计class犹如设计type请记住:Class的设计就是type的设计。
2021-10-20 23:36:30 96
原创 Effective C++ 笔记(三)
三:资源管理条款13:以对象管理资源以对象管理资源的两个关键想法:①获得资源后立刻放进管理对象内。②管理对象运用析构函数确保资源被释放把资源放进对象内,我们便可以依赖C++的“析构函数自动调用机制”确保资源被释放。如auto_ptr和shared_ptr智能指针。auto_ptr,复制动作会使它(被复制物)指向null。为防止资源泄露,请使用 RAII(Resource Acquisition Is Initialization)“资源取得时机便是初始化时机”。//错误版本!!!void
2021-10-20 11:46:33 83
原创 Effective C++笔记(二)
二:构造/析构/赋值运算条款05:了解C++默默编写并调用哪些函数编译器产出的析构函数是个non-virtual,除非这个class的base class自身声明有virtual析构函数请记住:编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。条款06:若不想使用编译器自动生成的函数,就该明确拒绝//方法一:将copy构造函数、copy assignment操作符声明为private并且不定义。class HomeForS
2021-10-19 21:13:57 127
原创 Effective C++ 笔记(一)
2021/10/9 -----10/19,十天看完Effective C++,记录一下收获,方便以后复习。一:让自己习惯C++条款01:视C++为一个语言联邦将C++视为一个由相关语言组成的联邦而非单一语言,共四个次语言①C:C++仍是以为基础②Object-Oriented C++:这一部分是面向对象设计之古典守则在C++上的最直接实施。如构造,析构函数,封装,继承,多态,virtual函数(动态绑定)等等。③Template C++:C++的泛型编程部分。④STL:标准模板库。请记住:C
2021-10-19 17:15:20 123
原创 Linux下端口和进程的关系
端口不是独立存在的,它是依附于进程的。某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了。下次若某个进程再次开启,则相应的端口也再次开启。而不要纯粹的理解为关闭掉某个端口,不过可以禁用某个端口。在webserver项目中,如果不运行程序,那么访问这个ip:端口会出现拒绝访问请求,原因是这个端口处于关闭状态,只有把程序运行起来,程序中绑定了那个ip:端口才能访问(此时这个端口才处于开放状态)。可以通过"netstat -anp" 来查看哪些端口被打开。如查询端口10000的状态ne
2021-10-03 00:46:14 855
原创 KMP算法笔记
//自己看完y总算法基础课后的笔记#include <iostream>using namespace std;const int N = 100010, M = 1000010;int n, m;int ne[N];char s[M], p[N];/* s[ ]是模式串,即比较长的字符串。 p[ ]是模板串,即比较短的字符串。 两个串都是从下标为1开始的 每次比较是 s[i]和p[j+1]进行比较,因此j代表已经匹配的字串的最后一个字符的下
2021-09-25 11:40:17 89
原创 将vscode 设置为enter选中补全代码
找到 keybindings.json文件的地址用记事本更改在最下面添加如下代码,{ "key": "enter", "command": "acceptSelectedSuggestion", "when": "editorTextFocus && suggestWidgetVisible" }保存退出即可
2021-09-19 20:13:02 730
原创 c++ 生产随机数的方法
mt19937 gen(random_device{}());//产生随机数 头文件是<random>uniform_int_distribution<int> dis(1,100000);//参数为生成随机数的类型,构造函数接受两个值表示区间段 头文件是<random>int main(){ mt19937 gen(random_device{}()); uniform_int_distribution<int> dis(1,100000)
2021-08-30 12:54:27 318
原创 c++ 用new创建一个数组
int *a = new int[100];//没有初始化int *a = new int[100]{};//全部初始化为0int *a = new int[100]{1,2,3,4,5};//初始化前五个,后五个为0
2021-07-16 22:21:05 2373
原创 map和unordered_map的下标操作
c[k] 返回关键字为k的元素: 如果k不在c中,添加一个关键字为k的元素,对其进行值初始化c.at(k) 访问关键字为k的元素,带参数检查;若k不在c中,抛出一个out_of_range异常
2021-07-06 10:16:16 627
原创 c++ 两种方法 求组合数
方法一如果int不够用就换成long long int C(int n, int m) //求组合数 { if (m < n - m) m = n - m; int ans = 1; for (int i = m + 1; i <= n; i++) ans *= i; for (int i = 1; i <= n - m; i++) ans /= i; return ans; }
2021-06-18 21:38:34 1453
原创 c++如何实现以任意数为底的对数(底数合法)log()
这是高中学过的换底公式c++对数函数 log() 是以e为底的对数函数log10()是以10为底的对数函数,如果要求结合上面的换底公式知,它 = log(n)/log(k)
2021-06-18 20:17:53 2197
原创 如何截断浮点数小数部分c++ floor
float floor (float x ); double floor (double x ); long double floor ( long double x );c++ 头文件<math.h>中的floor函数能够实现将一个浮点数的小数部分截断的功能,也就是返回一个不大于x的最大整数
2021-06-18 19:42:50 1388
原创 异或运算规律
1.a ⊕ a = 02. a ⊕ b = b ⊕ a3. a ⊕b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c;4. d = a ⊕ b ⊕ c 可以推出 a = d ⊕ b ⊕ c.5. a ⊕ b ⊕ a = b.6.若x是二进制数0101,y是二进制数1011,则x⊕y=1110比较特殊的有:根据两个相等的数异或值为零:如sum = a ^ b ^ c ^ d,如果随机删去一个变量比如删除b之后的异或和为sum1 = a ^ c ^ d,那么有sum1 = sum^
2021-05-22 19:49:30 5237
原创 c++ auto基本介绍
在C++11标准的语法中,auto被定义为自动推断变量的类型auto i = 5;//此时auto相当于intauto j = 5.0; //此时auto相当于doublemap<int,int>m;for(auto it=m.begin();it!=m.end();++it)//这里it被auto推断为map<int,int>::iterator类型{//....}不过必须给申明的变量赋予一个初始值,否则编译器在编译阶段将会报错。...
2021-04-27 10:14:23 409
原创 c++列表初始化返回值
在C++11之前,如果我们想要返回一组数据,我们必须在子函数中构造一个对应的容器,借助容器来进行返回。vector<int> process(){ vector<int> v={1,2,3,4} return v;}在新标准下,我们可以直接返回字面值,该字面值会用于容器的构造,而无需我们自己去构造。vector<int> process(){ return {1,2,3,4};}...
2021-04-27 09:27:27 534
原创 C++ string .at()函数的用法
string .at()用于获取指定字符string str;cin>>str; //str=="12345"char ch;ch = str.at(0);cout<<ch; //ch=='1';at(i),i就是想要获取的字符的下标,函数返回值为指定的字符
2021-04-08 22:25:14 22768 1
原创 1016--乙级
#include <iostream>#include<cstring>#include<cstdlib>#include<sstream>#include<math.h>using namespace std;int main() { int i = 0,num1=0,num2=0,num=0; string s,t, p[4] ; getline(cin, s); for (istringstream sin(s);
2021-04-04 21:02:27 43
原创 1014--乙级
#include <iostream>#include<cstring>using namespace std;//注意题目表意不明,一对的意思是同一位置下,同时结束条件是小于两对中较小的那对bool isLetter1(char c,char c1) { if (c >= 'A' && c <= 'G'&&c1 >= 'A' && c1 <= 'G') return true; else
2021-04-03 23:45:35 63
原创 1013--乙级
#include<iostream>#include<math.h>using namespace std;bool IsPrime(int num) //num为我们要判断的数{ for (int i = 2; i <= sqrt(num); i++) //最优化的判断方式,平方根 { if (num % i == 0) { return false; } } return true;}int main(){ int M, N
2021-04-03 08:52:38 44
原创 1012--乙级
#include<iostream>#include<string>#include <iomanip>#include<sstream>using namespace std;int main(){ int noUse = 0; cin >> noUse; string s; getline(cin, s); int a1 = 0, a2 = 0, a3 = 0, a4 = 0, a5 = 0
2021-04-02 23:29:19 59
原创 1011--乙级
#include<iostream>#include<cstring>using namespace std;int main(){ long p[10][3]; //int范围不够 int num = 0; cin >> num; int tag[10]; for (int i = 0; i < num; i++) { for (int j = 0; j < 3; j++) {
2021-04-02 08:29:40 217
原创 1010--乙级
#include<iostream>#include<sstream>using namespace std;int main(){ string s; getline(cin, s); int num = 0,num1 = 0; string t, a[1000]; for (istringstream sin(s); sin >> t;) { //输入所有数据,以空格隔开,将所有数据(不包括空格)存入a数组中
2021-04-01 09:27:47 37
原创 1009--乙级
#include<iostream>#include<sstream>//istringstream的头文件#include<string>using namespace std;int main() { string str; getline(cin, str); //使用getline(cin,i,?)函数可以输入带空格的整行字符 ,第三个参数默认为'/n'。 // cin>>str; cin不支持录入空格 is
2021-03-30 07:59:42 73
原创 1008--乙级
#include<iostream>using namespace std;int main() { int N, M; cin >> N >> M; M = M % N; int* p = new int[N]; for (int i = 0; i < N; i++) { cin >> p[i]; } for (int i = N - M; i < N; i++) { cout << p[i] &l
2021-03-29 09:06:32 60
原创 1007--乙级
#include<iostream>#include<string>#include<math.h>using namespace std;int main() { int k; // j 的平方根 int result = 0;// 结果 int i = 0, num = 0; cin >> num; int j = 2,count=0; int p1[10000]; for (j
2021-03-28 14:06:21 40
原创 1006--乙级
#include<iostream>#include<string>#include<algorithm>using namespace std;int main() { string result; int num = 0,count =0; cin >> num; int num1 = num; for (int i = 0; num1 != 0; i++) { num1 /= 10; count++; } int*
2021-03-27 20:53:49 55
原创 1005--乙级
#include<iostream>#include<algorithm>using namespace std;int main() { int n = 0,i=0,count =0; int contrast1[10000] = {1,2}; //如果数组长度小了运行时可能出现错误 cin >> n; int* num = new int[n]; int* ctrlc = new int[n]; for (int i = 0; i < n
2021-03-27 10:50:54 43
原创 1004--乙级
#include<iostream>#include<string>using namespace std;class Student{ public: Student() {}; Student(string, string, int); void print(); int getscore(); private: string name; string id; int score;};int Student::getscore()
2021-03-27 08:59:29 53
原创 1002--乙级
#include<iostream>#include<cstring>using namespace std;#define N 1000 void show(int sum); int main(){ int i; int sum=0,len; int num[N]; string str; cin>>str; len=str.length(); for(i=0;i<len;i++){ num[i]=str[i]-'0';
2021-03-27 08:55:36 49
原创 1001--乙级
#include<iostream>using namespace std;int main() { int n = 0, count = 0; cin>>n; while (n != 1) { if (n % 2 == 1) { n = (n * 3 + 1) / 2; } else { n = n / 2; } count++; } cout<<count<<endl; return 0;}
2021-03-27 08:32:27 48
原创 c++动态数组创建
正确的方法int num = 0;cin>>num;int* p = new int[num]; //动态创建数组//最终释放创建的数组for(int j =0;j<num;j++){ delete[] p[i];}delete []p;错误的方法int i = 0;cin>>i;int p [i]; //错误 因为在编译阶段,编译器并不知道 i 的值是多少...
2021-03-27 08:27:27 404
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人