我知道C++是一种非常快的语言,但在某些情况下C不是同样快还是更快?
然后,您可能会说C++有OOP,但是大多数编程难题所需的OOP数量并不大,在我看来,C可以处理这个问题。
以下是我问这个问题的原因:我对编程竞赛和竞赛非常感兴趣,我习惯于用C语言编写这些代码。然而,我注意到绝大多数人使用C++ (例如,2011年Google上的25名入围者中有17名使用了它,而没有人使用C),所以我想知道我是否在使用C时处于劣势。
除了面向对象之外,是什么使C++成为更适合编程竞赛的语言呢?在比赛中,我应该学习和使用的语言有哪些特点?
作为背景,我认为自己对C相当精通,但我才刚刚开始学习C++。
发布于 2011-12-16 11:54:04
首先,总会有一些问题用一种语言比另一种语言更好地解决。对于“更好”的定义,总会有比任何其他语言“更好”解决具体问题的语言。然而,很多问题有着非常相似的需求(一些I/O,一些计算),并且面临着类似的要求(合理的可靠性、合理的性能)。
正如您已经知道的,对于绝大多数的问题,我声明C++没有提供重大的缺点和一些重大的改进。大胆?有些人似乎是这样认为的,但事实确实如此。让我们首先澄清一些非常常见的C++误解:
所以,如果你相信我的话,我们已经确定"C++并不比C差得多“。让我们看看如何使C++成为更好的C:
C++允许一个人编写这样的东西:
template <typename T>
struct element_t {
element_t<T> *next, *prev;
T element;
};C++实现不仅可以防止常见的程序员错误(比如在列表中放置错误类型的元素),还允许编译器进行更好的优化!例如,在C和C++中都有一个通用的排序实现-
C例程定义为:
void qsort(void *base, size_t nmemb, size_t size,
int(*compar)(const void *, const void *));而C++例程被定义为
template void sort(RandomAccessIterator first, RandomAccessIterator last);区别在于,例如,排序一个整数数组,在C情况下,每一个比较都需要一个函数调用,而C++实现将允许编译器内联整数比较调用,因为编译器在编译时会自动实例化实际的排序例程,并在模板参数中插入正确的类型。
当然,STL并不是灵丹妙药--但在解决一般问题时,它确实提供了很大的帮助。您用C实现列表的频率是多少次?如果你有时间去做的话,RB树会是一个更好的解决方案吗?使用STL,您不需要做出这样的妥协-使用树,如果它是一个更好的适合,它是一样容易使用列表。
好吧,所以我只是在讨论好的部分。有什么坏处吗?当然有。然而,他们的人数却一天比一天减少。让我解释一下:
因此,C++的两个主要问题是C++作为一种年轻语言的结果。它们迟早会消失的。对于大多数的问题来说,如果你能找到好的程序员(或者自己学习好的C++ ),那么这些问题现在就不是真正的问题了。
发布于 2011-12-16 17:14:00
这样的竞赛与其说是关于程序的速度,不如说是关于程序员的速度。C++具有标准库特性、类型安全性和内存管理帮助,这使得开发和调试更快,即使可执行文件的速度稍慢。
发布于 2013-10-19 19:04:12
说到之前的Code决赛,它主要是关于库,而不是语言特性。竞争解决方案很少使用任何OOP设计原则,但您可能会看到大多数标准库容器和算法-字符串、向量、列表、堆栈、队列、deque、priority_queue、set、map、复杂、对、位集、lower_bound、反向、排序、查找、计数、nth_element、min、max、min_element、max_element、unique、next_permutation、.熟练的参赛者将熟悉他们,并获得了大量的时间,不需要实现和调试他们在C。
代码Jam允许参赛者引入自己的代码并使用第三方库,因此理论上,参赛者可以在C中预先实现所有这些,然而,并不是所有的竞赛都允许这样做,模板和操作符重载使得这一点比C语言更加可读性。
https://softwareengineering.stackexchange.com/questions/125576
复制相似问题