2016-12-17 104 views
-2

我是一名C++程序员。我正在尝试Eratosthenes的筛子。我的程序正在快速计算多达100万的素数,并且与Sieve实际相符。但是,我怎么知道是否有更好的代码编写方式,或者我的编码方式不好。我如何知道我的代码方法好还是不好?

很多人都说google尝试google,并将其与其他解决方案进行比较。我不支持这一点,因为众所周知,每个程序员都有不同的解决问题的方法。

链接到我的代码:http://pastebin.com/qkrBpd29

+0

关于你的代码的评论你可以在[代码评论](http://codereview.stackexchange.com) – celtschk

+1

它工作吗?代码是否可读?它可维护吗?那么你的解决方案很好。很可能你总是会回头看看你在6个月时间内编写的代码,并用新发现的知识做一些稍微不同的事情。并不是所有你写的代码都需要是“完美的做事方式”。这就是说,如果你正在寻找代码的一些反馈,看看[代码审查SE](http://codereview.stackexchange.com/) – Tas

+1

写你的代码。离开并做其他与此代码无关的项目(可以包括其他软件项目,翻新房屋或任何其他项目,只要您完全不考虑此代码)。六个月后,清除你的代码。如果您发现代码清晰易懂,就会通过。如果你发现代码乱七八糟,那不是很好的代码。 – Peter

回答

2

编辑:我只是意识到你的代码并没有真正使用任何C++的功能,只有std::cinstd::cout。它基本上是C代码。我在下面的回答是假设你正在使用C++。

从看你的代码我会建议,考虑内存管理。你用没有破坏的资源编写对象。当这些函数应该是类函数时,您正在编写接受节点对象的全局函数。

了解智能指针std::unique_ptrstd::shared_ptr#include <memory>以及适当地使用它们的位置。

如果可能的话,每当你需要堆上的东西时,在栈上声明一些东西以确保它在事后被清除,这就是所谓的RAII。 (旁注,RAII,是一直坚持一个可怕的名字,不用担心它代表什么,因为它不是很描述。)

阅读Effective C++ by Scott MeyersEffective Modern c++ Scott Meyers.

也有从cppcon上一些伟大的演讲YouTube上。

+0

谢谢。我以前也曾经遇到过这个问题,使用类跳过了我的想法。谢谢 –

+0

让我感到意外的是C++的结构和类具有几乎相同的含义。我很惊讶地发现,在C++中,struct可以具有析构函数,构造函数,继承,函数,私有成员。 唯一的区别是默认的可见性。类成员和方法默认是私有的,结构默认是公共的。 –

1

如果我理解正确的话,那么你的实现是基于列表。这不是很好,因为在删除之前你必须找到正确的位置。我认为这是更简单的使用数组来代替(对不起,java代码):

boolean[] isNotPrime = new boolean[MAX + 1]; 
// we know 2 is prime, it's enough to look at the odd numbers 
primes.add(2); // list of primes 
for (int i = 3; i < isNotPrime.length; i += 2) { 
    if (isNotPrime[i]) 
    continue; 
    primes.add(i); 
    for (int j = 3 * i; j < isNotPrime.length; j += 2 * i) 
    isNotPrime[j] = true; 
} 
0

没有代码是完美的,也有做的事情,但问自己或他人的下列问题应该可以帮助你很多正确的方法。

  1. 我的代码是否正确?它是否始终提供正确的答案?
  2. 我的代码有效吗?
  3. 我的代码是否可维护?其他人可以轻松构建它而不必重写整个事物吗?
0
struct Node{ 
    int a; 
    Node* linkl; 
    Node* linkr; 
    }*top,*rear; 

顶部和后部是全局变量。不好。全局需要非常少见,你在这里不需要它们。

相关问题