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

📅  最后修改于: 2020-05-04 12:12:32             🧑  作者: Mango

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

Pythonn

  • 简单易用: Python非常简单,易于编写(我们可减少键入),并且拥有大量的模块,其中包含几乎所有您可以想象的功能。
  • 数据类型: Python通常是首选,因为它对整数的存储没有任何上限 。 同样,不需要指定它是哪种数据类型,类似的事情使编写代码更容易,但同时也使编译变得困难(参考编译时间)。
  • 执行速度慢 Python程序通常比Java慢(请参阅参考资料)。 由于执行时间长,Python在开始时就被排除在外。
  • 不允许在任何地方使用 Python 在各种流行的在线竞争性编程门户网站的竞赛中都不允许使用Python。

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

Java

  • STL与容器: C++中的STL设计得非常好,而有些人最喜欢Java容器。 在少数情况下,STL没有直接解决方案。 例如,STL中的priority_queue不支持减少键操作,这是Dijkstra最短路径算法和Prim算法的实现所必需的。
  • 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++包括其自己的库,包括Standard Template Library。STL包含许多有用的模板,例如上面的排序例程。它包括有用的通用数据结构,例如列表,映射,集合等。与排序例程一样,其他STL例程和数据结构也“针对”程序员的特定需求“量身定制” –程序员要做的就是填写类型。
    例如,如果需要实现二进制搜索来解决问题,则必须编写自己的函数,而在C++中,二进制STL例程定义为:

     binary_search(startaddress, endaddress, valuetofind)

    C++与Java

    • Java编程时,程序员需要编写更多代码
    • Java是冗长的:在C++中,只需编写scanf / printf即可简化输入输出。在Java中,您需要BufferedReader类,这又很乏味。
    • C++ STL与Java容器:大多数程序员发现使用STL更容易。
    • C++更为流行:无论是起源年份还是使用舒适性,但是C++在使用该语言的用户数量方面都优于Java。
    • C++节省时间:众所周知,Java比C++慢。我们通常需要多次编译并运行程序以对其进行测试。在C++中花费的时间相对少得多。因此,在有限的时间竞赛中,可以节省我们的时间。

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