草庐IT

C++知识点捕捉

hblgzsx 2023-03-28 原文

C++知识点捕捉

1.对于提高cin运行时间代码:

ios::sync_with_stdio(false);
	cin.tie(0);//cin.tie(nullptr);

注意,利用以上代码时,不能使用getline(cin,str);否则会读入空串
  • 减少运行时间,scanf永远的神

  • 13倍,……………………………………

2、提高读入时间的代码:

inline int max(int x,int y){return x>y?x:y;}
inline int min(int x,int y){return x<y?x:y;}
inline int abs(int x){return x>0?x:-x;}
inline void swap(int &x,int &y){int t=x;x=y;y=t;}
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
    while (ch>='0'&&ch<='9'){x=x*10+ch-48;ch=getchar();}
    return x*f;
}

3、字符串输入带空格的,只能使用数据类型是char型的。

const int N=100005;
char a[N];
cin.getline(a,N);
  • scanf读入string字符串
  • 提示,一定不要scanf和cin同时用,一次选用一种,必须。

4结构体的运用语句

struct Edge
{
    int a,b,w;
    bool operator<(const Edge& W) const
    {
        return w<W.w;//升序
    }
}edges[M];

降序:W.w<w;注意不可改变<

赋值:edges[i]={a,b,w};

5 万能头文件

  • 能不用就不用,也会耗费时间,最好记住所用函数具体的库
  • 由于C语言没有命名空间,头文件并不存放在命名空间中,因此在C++程序文件中如果用到带后缀.h的头文件时,不必用命名空间。只需在文件中包含所用的头文件即可
#include<bits/stdc++.h>

6 sort与cmp

struct sno 
{
	int x,y,z,w,d;
}q[305];


bool cmp(sno a,sno b)
{
    if(a.w>b.w) return 1;
    else if(a.w<b.w) return 0;
    else
    {
        if(a.x>b.x) return 1;
        else if(a.x<b.x) return 0;
        else
        {
            if(a.d>b.d) return 0;
            else return 1;
        }
    }
}


//主函数:sort(q,q+n,cmp);

7.int范围

  • -2147483648 ~ 2147483647
  • 2^32=4294967296
  • 2^31=2,147,483,648

8.二分查找

  • 只针对有序序列。

9. c++自带函数耗时长

  • 能不用就不用,要不然就自己写一个。比如memset

10.vector 创建二维数组 && 三维数组

  • 二维数组
统一赋值
vector<vector<int> > d(n+1,vector<int> (n+1,INF));
INF设置初始值,注意不要超过int类型,否则会溢出,溢出就可能负一个负值。
>>注意一定要有空格> >,要不然会成cout>>,旧的编译器会报错,牛客就会报错
单独赋值
std::vector g2(m,std::array<int,3>{1,2,3});
  • 创建非矩形的二维数组
比如
1
1	2
1	2 	3
这种类型的二维数组
//未对vector进行初始化赋值,默认为0
vector < vector<int> >f(m);
//创建一个二维数组,m行,然后使用resize对每行的长度进行重置
for(int i=0;i<m;i++)
{
    f[i].resize(n);
}
  • 三维数组
单独赋值
std::vector dp(m+1, std::array<std::array<int,3>,3>{1,2,3,4,5,6,7,8,9});
统一赋值
int m=20,n=20,p=20;
std::vector< std::vector < std::vector<int> > > g1(m,std::vector< std::vector<int> >(n,std::vector<int>(p,1)));
  • 同样可以创建非矩形的三维数组
	std::vector<std::vector <std::vector<int> > > g3(m);
	for(int i=0;i<m;i++)
	{
	    g3[i].resize(n);
	}
	for(int i=0;i < m;i++)
	{
	    for(int j = 0;j < n;j++)
	    {
	        g3[i][j].resize(p);
	    }
	}
  • 实例代码
#include<bits/stdc++.h>
#define INF 1e9
int main()
{
	int m = 19;
	std::vector dp(m+1, std::array<std::array<int,3>,3>{1,2,3,4,5,6,7,8,9});
	std::cout << dp[11][0][0] <<" ";
	std::cout << dp[18][0][1] <<" ";
	std::cout << dp[19][0][2] <<" ";
	std::cout << dp[10][1][0] <<" ";
	std::cout << dp[13][1][1] <<" ";
	std::cout << dp[15][1][2] <<" ";
	std::cout << dp[12][2][0] <<" ";
	std::cout << dp[17][2][1] <<" ";
	std::cout << dp[14][2][2] <<"\n";
	
	
	
	int n = 20;
	std::vector g2(m,std::array<int,3>{1,2,3});
	std::cout << g2[2][0]<<" ";
	std::cout << g2[2][1]<<" ";
	std::cout << g2[2][2]<<"\n";
	
	
	
	std::vector < std::vector<int> > g(m,std::vector<int>(n,INF));
	std::cout << g[10][0] <<" ";
	std::cout << g[11][1] <<" ";
	std::cout << g[12][2] <<"\n";
	
	
	
	//未对vector进行初始化赋值,默认为0
    std::vector < std::vector<int> > f(m);
    //创建一个二维数组,m行,然后使用resize对每行的长度进行重置
    for(int i = 0; i < m; i++)
    {
        f[i].resize(n);
    }
    std::cout << f[1][0] <<" ";
    std::cout << f[2][1] <<" ";
    std::cout << f[3][8] <<"\n";
    
    
    
    int p=20;
    std::vector< std::vector < std::vector<int> > > g1(m,std::vector< std::vector<int> >(n,std::vector<int>(p,1)));
    std::cout << g1[11][0][0] <<" ";
	std::cout << g1[18][0][1] <<" ";
	std::cout << g1[16][0][2] <<"\n";
	
	
	
	std::vector<std::vector <std::vector<int> > > g3(m);
	for(int i = 0; i < m; i++)
	{
	    g3[i].resize(n);
	}
	for(int i = 0; i < m; i++)
	{
	    for(int j = 0; j < n; j++)
	    {
	        g3[i][j].resize(p);
	    }
	}
	
    std::cout << g3[11][0][0] <<" ";
	std::cout << g3[18][0][1] <<" ";
	std::cout << g3[16][0][2] <<"\n";
    
    
    
    return 0;
}
  • 运行结果
1 2 3 4 5 6 7 8 9
1 2 3
1000000000 1000000000 1000000000
0 0 0
1 1 1
0 0 0

11.强制类型转化

1ll*m*n,1ll相当于 long long 类型下的1,
    所以1ll*m*n=long long 类型下的m*n

12.建立long long长度的数组技巧

map<ll,ll>a

13.一种主函数内部定义函数方式---方便使用vector及时创建数组时使用

  • 必须引进头文件#include<functional>


function<void(int, int, bool)> search = [&](int L, int R, bool odd) 
{
 	while (L <= R) 
    {
 		int mid = L + R >> 1;
 		int len = 2 * mid - (odd ? 1 : 0);
 		bool answer = 0;
 		for (int l = 1, r = l + len - 1; r <= n; ++l, ++r)
        {
 			ULL Lres = LHash[r] - LHash[l - 1] * P[len];
 			ULL Rres = RHash[l] - RHash[r + 1] * P[len];
 			if (Lres == Rres) 
        	{
 				answer = 1;
 				int i = l + (len + 1) / 2 - 1;
 				ans = max(ans, len / 2 + same[i]);
 			}
	 	}
 		if (answer)
    	{
 			L = mid + 1;
 		}
    	else R = mid - 1;
 	}
 };//注意分号

14.字符串读入的注意点---有关于从下标1开始读取

char a[N][N];
for(int i=1;i<=n;i++)
{
	cin>>a[i]+1;//相当于坐标从1开始,但是原来的0下标位存储的是'/0',所以如果读a[i],那么一定会截止,读到'/0'就结束,注意这里是第二维从1开始,但是我们读a[i]的话,是从第二维的0下标位去读取,所以什么也读不出来
}

15.数组初始化

16.时间复杂度

17.cout输出保留小数

std::cout << std::fixed << std::setprecision(10) << "\n";
  • 10表示小数点后十位
    precision中文意思为:精度

有关C++知识点捕捉的更多相关文章

  1. ruby - 我怎样才能更好地了解/了解更多关于 Ruby 的知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我最近开始学习Ruby,这是我的第一门编程语言。我对语法感到满意,并且我已经完成了许多只教授相同基础知识的教程。我已经写了一些小程序(包括我自己的数组排序方法,在有人告诉我谷歌“冒泡排序”之前我认为它非常聪明),但我觉得我需要尝试更大更难的东西来理解更多关于Ruby.关于如何执行此操作的任何想法?

  2. jquery - Rails 4 如何捕捉 ajax :success event - 2

    我正在使用Rails4.0。我正在发送这样的事件(注意:remote=>true):true,:class=>"rate-btnyes-btnbtnbtn-defaultbtn-sm"}%>我的Controller看起来像这样:defratevideo=Video.find_by(hashed_id:params[:id])action=params[:yesno]putsvideo.hashed_idputsactionrespond_todo|format|if(action=='yes')new_rating=video.rating==1?0:1video.update(is_

  3. ruby - Ruby基础知识 - 2

    Asitcurrentlystands,thisquestionisnotagoodfitforourQ&Aformat.Weexpectanswerstobesupportedbyfacts,references,orexpertise,butthisquestionwilllikelysolicitdebate,arguments,polling,orextendeddiscussion.Ifyoufeelthatthisquestioncanbeimprovedandpossiblyreopened,visitthehelpcenter提供指导。已关闭8年。什么是学习ruby语言

  4. ruby - 捕捉 Mechanize 404 => Net::HTTPNotFound - 2

    我写了一个简单的函数来处理url的获取:deftender_page_geturl,agentsleep(rand(6)+2)beginreturnagent.get(url).parserrescueErrno::ETIMEDOUT,Timeout::Error,Net::HTTPNotFoundEYE.debug"--wintersleep#{url}"puts"-x-#{url}"sleep(300)tender_page_geturl,agentrescue=>eputs"-x-#{url}"EYE.debug"--unknownexception"EYE.debug"#{ur

  5. ruby - 我应该具备哪些 Ruby 知识? - 2

    按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭9年前。我刚刚发现了whatc#knowledgeshouldIhave?问题和想知道的相同,但对于Ruby。我认为Ruby是我最喜欢的编程语言,除了学习基础知识外,至少我从众多RubyonRails项目和一些Ruby脚本中学到的东西,我还尝试通过阅读像Gluttonous这样的博客来学习。,O'ReillyRuby,OlaBini,和PolishingRuby.

  6. Unity基础知识之顶点吸附、创建组合体 - 2

    Unity基础知识之顶点吸附、创建组合体一、顶点吸附顶点吸附:选择物体后按住键盘上的V键,鼠标定点定位,再拖拽到目标物体对齐即可。注:操作成功后先松V键。1、两个平面Plane的顶点吸附2、两个物体cube的顶点吸附二、创建组合体(子弹)组合体子弹由2个capsule(胶囊)、1个cylinder(圆柱体)组成,如图先创建这3个对象。再将其中一个capsule按照一定比例缩小,将三个对象按照一定位置放置好。创建一个GameObject,将三个对象放在该GameObject里,这样就是父子结构。为创建的组合体即子弹可以添加材质Material:在assets目录下新建Material,选择颜色后

  7. 【操作系统】十分钟了解关于TCP/IP网络的基础知识(二)ARP、路由器、DHCP、DNS以及TCP/IP - 2

    承接上篇文章(十分钟了解关于TCP/IP网络的基础知识)五.ARP(地址解析协议)        虽说使用IP地址确实方便了我们使用者记忆以及整理归类、寻找信息的发送目的地,但是最终接收数据的地方,还是MAC地址,于是乎,为了实现有IP地址到MAC地址的转换,引入了名为ARP(AddressResolutionProtocol)又称之为地址解析协议。      ARP通过广播(Broadcast,这是个专业名词,后面还会继续提起)的方式对LAN中所有的计算机提问:“哎,谁IP地址是10.165.7.116(上篇文章中的例子)呀?你MAC地址多少啊,快过来登记一下!”,如果有哪台计算机回复了MA

  8. javascript - 我应该如何开始学习 JavaScript、jQuery 等?我的编程知识为零 - 2

    关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。要求我们推荐或查找工具、库或最喜欢的场外资源的问题对于StackOverflow来说是偏离主题的,因为它们往往会吸引自以为是的答案和垃圾邮件。相反,describetheproblem以及迄今为止为解决该问题所做的工作。关闭8年前。Improvethisquestion我是设计出身。我的编程知识是零。在学习了XHTML和CSS之后,我想学习并掌握JavaScript、jQuery等。我应该如何开始?这将是我第一次尝试编程。我可以使用和编辑现成可用的jQuery/JavaScript脚本,但我不能自己制

  9. javascript - 如何让 Internet Explorer Javascript 调试器也暂停捕捉异常? - 2

    我正在尝试调试仅在IE中发生的“未找到属性”异常。糟糕的是这个异常正在被捕获和处理,我只能弄清楚如何让IE9调试器在未捕获异常时暂停(Ctrl+Shift+E)。我不能在不弄乱我的程序逻辑的情况下暂时删除相关的try-catch子句,我宁愿不必逐步手动操作调试器。如何轻松找到生成异常的行? 最佳答案 一段时间后,我得出的结论是,遗憾的是没有简单的方法来强制IE停止捕捉到的异常。顺便说一句,我已经解决了触发这个问题的问题。我正在控制台记录一个XML文档,与Chrome和FF不同,IE处理得不好。这特别烦人,因为我使用console.l

  10. javascript - 使用网络摄像头捕捉图像 - 2

    我正在使用Asp.netMVC4开发一个项目。我需要用网络摄像头拍照。此应用程序应该可以配置为任何平板电脑。目前在台式机上运行该应用程序,在平板电脑上没有。我正在使用jscam.swf和jscam_canvas_only.swf。在平板电脑上,我在这些设备上使用SamsungGalaxy安装adobeflashplayer无法正常工作...有人知道其他一些拍照技术,或者如果有人可以帮助我解决这个问题,我将不胜感激 最佳答案 Flash在Android平板电脑上的支持有限,在iOS设备上不支持。更好的解决方案可能是转向100%HTML

随机推荐