一些小技巧

1、结构体的存储(开成员的顺序不同所用的空间也不同!!!)

今天发现了一下结构体中的一些很骚的东西,当然只要我们能够了解到结构体的储存规则,就不必要开一些浪费空间的东西。

博客链接:
结构体存储

关键字:偏移量,字节,自动对齐,字节边界数。

2、goto语句

goto语句应用

关键字:转移,传送,注意事项!

3、private和public还有(friend和protected)

这个东西感觉没什么用,但是了解一下,还是好的。

博客链接
private,friendly,public,protected

关键字:好像没啥用,类型。

4、static函数

如果在结构体中定义函数,只能用static,才能在外部用“::”符号进行访问!

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
class t
{
	public:
	   static int sum(int a,int b)
		{
			return a+b;
		}
};
int main()
{
	int a, b;
	scanf("%d%d",&a,&b);
	cout<<sum(a,b);
	return 0;
}

原因博客链接:
函数名前加static与不加static的区别
用法博客链接:
”::“用法

5、template

这个东西是加在函数前面的,他就叫“模板”,就是有了它,不管什么类型的数据输进去,就可以按照函数的规律有东西输出来,不会发生奇怪的事情,也就是说比如你要写一个swap,那么你如果不知道这玩意儿,你要写一个double的swap,int的swap,long long 的swap,总之直接把你写疯,而有了这个一个就可以搞定!

下面我们就上一个函数模板的template:

#include<bits/stdc++.h>
#include<string>
using namespace std;
template <typename functional> void xswap(functional &a,functional &b)
{
	functional c;
	c=a;
	a=b;
	b=c;
}
int main()
{
	string s;
	string c;
	cin>>s>>c;
	xswap(s,c);//important
	cout<<s<<endl<<c;
	int a,b;
	cin>>a>>b;
	xswap(a,b);
	cout<<a<<endl<<b;
	char e,d;
	cin>>e>>d;
	xswap(e,d);
	cout<<e<<endl<<d;
	return 0;
}

更多请见链接:
Template 基础篇-函数模板

当然还有类模板用法:

这里还正在学习:
C++中 模板Template的使用

6、cin优化

本人最近发现cin是可以进行优化的,cin并不是因为自身原因所以比scanf慢的,而是因为为了保留什么兼容性,把他变慢了,我们只要把这个兼容性关了以后,他就会变快!
关闭语句:

std::ios::sync_with_stdio(false);

下面是有趣的实验截图:

scanf语句测试:

这里写图片描述

cin不加优化:

这里写图片描述

cin加优化

这里写图片描述

有人会问,我每次写个读入就要写这么长的东西,岂不很恼火。
没事,其实只要define一下就可以了,

这里写图片描述

这就是cin的优化,我们发现优化后的cin比scanf都跑得快,表现的非常优异!这里再给大家推荐一下更快的读入算法,快读和fread,有兴趣的同学可以看一下下面的博客链接。

博客链接:输入流详讲

7、namespace神奇

这个东西不好说,下面直接上代码吧!

其实从某些方面来说,这个东西是可以不用申请的,只是会稍微有一点麻烦!

这里只是放几篇代码,绝世高人自己悟其中的奥一吧!

代码一

#include<iostream>
int main()
{
	int a;
	std::cin>>a;
	std::cout<<a;
}

代码二:

#include<iostream>
#define cin std::ios::sync_with_stdio(false);std::cin
#define cout std::ios::sync_with_stdio(false);std::cout
namespace njc
{
	int sum(int a,int b)
	{
		return a+b;
	}
}
using namespace njc;
int main()
{
	int a,b;
	cin>>a>>b;
	cout<<sum(a,b);
	return 0;
}

8、pair

博客链接:
pair

9、链表(Linked List)

博客链接:
链表

10、求导基本

等一会儿!

11、逆序对(离散化,动态开点)

从逆序对开始······
后续更新!

posted @ 2020-07-17 08:39  Mudrobot  阅读(127)  评论(0)    收藏  举报