将C ++仅用于STL容器是不好的做法?

时间:2010-01-29 05:41:52

标签: c++ c containers

首先是一点背景......

在下文中,我使用C,C ++和Java编写(通用)算法,而不是使用接口的gui和花哨程序,而是使用简单的命令行算法和库。

我开始学习Java编程。我对Java非常了解,并且我学会了很多地使用Java容器,因为它们往往会降低簿记的复杂性,同时保证良好的性能。我间歇性地使用了C ++,但我肯定不像Java那样好,而且感觉很麻烦。我不知道C ++是否可以在不需要查找每个函数的情况下工作,因此我很快就恢复了对Java的支持。

然后我突然过渡到汇编语言的破解和黑客攻击,因为我觉得我过于关注过于高级别的语言而且我需要更多关于CPU如何与内存交互的经验以及什么是真正发生的事情1和0的。我不得不承认这是我迄今为止用过的最具教育性和趣味性的计算机之一。

由于显而易见的原因,我无法每天使用汇编语言进行编码,它主要用于娱乐转移。通过这次经历了解了有关计算机的更多信息之后,我意识到C ++与Java相比更接近“1和0的水平”,但我仍觉得它非常钝,就像瑞士军刀太多了小玩意做任何优雅的任务。我决定试试普通香草C,我很快就爱上了。在简单性和足够的“微管理者”之间,这是一个快乐的媒介,不能抽象出真正发生的事情。但是,我确实错过了关于Java的一件事:容器。特别是,一个动态扩展的简单容器(如stl向量)非常有用,但每次必须在C中实现时非常痛苦。因此,我的代码目前看起来几乎完全是C,其中引入了C ++容器,这是我在C ++中使用的唯一功能。

我想知道它在实践中是否考虑使用C ++的一个特性,而忽略其余的支持C类型代码?

4 个答案:

答案 0 :(得分:14)

简短的回答是,“这不是真正使用C ++的最有效方式。”

如果使用得当,强类型系统,通过引用传递的能力以及RAII等习语使C ++程序更可能是正确的,可读的和可维护的。

没有人可以阻止您按照您想要的方式使用该语言。但是,你可能会通过不学习和利用实际的C ++特性来限制自己。

如果您编写其他人必须阅读和维护的代码,他们可能会喜欢使用“真正的C ++”而不是“C with classes”(用前一位评论者的话来说)。

答案 1 :(得分:6)

对我来说似乎很好。这是我真正使用的C ++的唯一部分。

答案 2 :(得分:4)

现在,我正在写一个数字计算器。没有多态,没有控制委托,没有交互。 <iostream>是一个瓶颈所以我在C中重写了I / O.

这些函数主要在一个代表工作线程的类中。所以这并不是具有线程局部变量的OO。

vector一样,我使用<algorithms>非常重要。但是重型数据结构是用简单的C语言编写的。主要是循环的单链表,它甚至不能轻易地具有不同的begin()end(),这不仅意味着容器而且意味着序列(以及 - 循环)是禁区。然后模板帮助预处理器生成主内循环。

解决问题的最自然方式可能是正确的。您不希望解决方案来搜索问题。学习使用C ++是好的,但面向对象适用于某些问题,而不是其他问题。

另一方面,在C ++程序中使用bsearch中的stdlib.h是错误的。

答案 3 :(得分:4)

你应该以对你最有意义的方式使用C ++。