📜  编程技巧和窍门|集合2(用于竞争性编程的语言)

📅  最后修改于: 2021-06-25 20:37:47             🧑  作者: Mango

这是一个经常被问到的问题,因为在竞争性编程中应该首选哪种语言来提高效率。这是人们不应该担心的事情,因为重要的是逻辑而不是语言。大多数语言或多或少都是相同的,但是到目前为止,最流行的语言是C++,这是原因。

Python

简单易用: Python非常简单,易于编写(我们需要减少键入),并且具有大量的模块集合,其中包含几乎所有您可以想象的功能。

数据类型: Python通常是首选,因为它对整数的存储没有任何上限。同样,不需要指定它是哪种数据类型,类似的事情使编写代码更容易,但同时又使编译变得困难(参考编译时间)。

执行速度慢 Python程序通常比Java慢(请参见此内容)。由于执行时间长, Python在开始时就被排除在外。

现在我们基本上只剩下Java,C,C++,现在在这里很难进行比较,并且主要取决于用户,但是让我们讨论它们各自的优缺点。

Java

  • STL与容器: C++中的STL设计得非常好,而有些人则更喜欢Java容器。在少数情况下,STL没有直接解决方案。例如,STL中的priority_queue不支持Dijkstra最短路径算法和Prim’s算法的实现所需的减少键操作

Java的异常处理是无与伦比的:与C++相比, Java代码提供了更强大的异常处理。例如,在Java更容易跟踪ArrayIndexOutOfBound异常或分段错误。 C++ / C可能会给您错误的答案,但是Java在这种情况下肯定是可靠的。

超过时间限制:由于Java在时间限制方面(特别是在SPOJ中),Codeforces可能会稍慢一些,因此您可能会获得TLE。

大整数和正则表达式:就编程竞赛而言, Java具有一些优势。 Biginteger,正则表达式和几何库就是其中一些。

  • 现在让我们继续使用C++。

C++C

  • C++的速度可与C媲美:许多C程序也是有效的C++程序–编译时,此类C程序以相同的速度运行
  • C++不会强制进行面向对象的编程: C++语言包含一些语言扩展,可促进面向对象的编程,而C++不会在任何地方强制进行面向对象的设计-它仅允许这样做。
  • 参数化类型template关键字允许程序员编写算法的通用(与类型无关)实现。在C语言中,可以编写具有以下元素的通用列表实现:
struct element_t 
    {
       struct element_t *next, *prev;
       void *element;
    };
  • C++允许编写类似以下内容的代码:
template 
struct element_t 
{
    element_t *next, *prev;
    T element;
};
  • 更大的标准库: C++允许完全使用C标准库,并且C++包括其自己的库(包括标准模板库)。 STL包含许多有用的模板,例如上面的排序例程。它包括有用的通用数据结构,例如列表,映射,集合等。像排序例程一样,其他STL例程和数据结构也“针对”程序员的特定需求“量身定制” –程序员要做的就是填写类型。
    例如,如果需要实现二进制搜索来解决问题,则必须编写自己的函数,而在C++中,二进制STL例程定义为
binary_search(startaddress, endaddress, valuetofind)

C++与Java

Java代码越长,使用Java进行编程时,程序员需要编写更多Java

  • Java是冗长的:在C++中,只需编写scanf / printf即可简化输入输出。在Java,您需要BufferedReader类,这又很乏味。

C++ STL与Java容器:大多数程序员发现使用STL更容易。

C++更为流行:无论是起源年份还是使用舒适性,但就使用该语言的用户数量而言,C++优于Java 。

C++节省时间: Java比C++慢是众所周知的事实。我们通常需要多次编译并运行程序以对其进行测试。在C++中花费的时间相对少得多。因此,在有限的时间竞赛中,可以节省我们的时间。

总结起来,在编程竞赛中,C++迄今为止是最受欢迎的语言,其次是Java ,但是您应该始终选择自己喜欢的语言。对任何一种语言保持自信是最重要的。切勿选择一种您刚刚“学习过”的语言,因为用这种语言表达自己会很困难。

对于主题,请从Cakewalk问题开始,然后移至即席问题,然后介绍标准算法和数据结构。最后学习优化代码。所有这些时间都将重点放在学习数学上,因为数学算法是吸引竞争性编程的重要组成部分。

快乐编码!

参考:http://unthought.net/c++/c_vs_c++.html

本文是由我们的校园极客Rahul Agarwal,Aditya Chatterjee,Shubham Singh Rajput,Vineet Sethia,Saiteja Reddy,Shaily Seth,Mudit Maheshwari,Ajay Jain和Ruchir Garg的贡献专门撰写的。

编程技巧和窍门|套装1(面向初学者)

如果您不熟悉竞争性编程,本文可能会帮助您编写第一个代码。

如果您希望与行业专家一起参加现场课程,请参阅《 Geeks现场课程》和《 Geeks现场课程美国》。