C++
随机存取-常数O(1)
Python
索引访问在两端为O(1),但在中间则减慢到O(n)。
如果我没有遗漏任何东西,那么对于python和C++中的deques来说,其他的一切都同样快,至少在复杂性方面是这样的。在某些情况下,有没有什么东西能使python的缺陷更好呢?如果不是,他们为什么不直接切换到C++所拥有的呢?
对于Qt/C++项目,我们将使用doxygen来生成一些文档,因此我正在寻找一个“最佳”的配置文件。
我在想的一件事是你有像这样的东西
OPTIMIZE_OUTPUT_FOR_C = NO
OPTIMIZE_OUTPUT_JAVA = NO
OPTIMIZE_FOR_FORTRAN = NO
OPTIMIZE_OUTPUT_VHDL = NO
但是我在C++上找不到这样的东西,我也不确定我是否需要在C++上有这样的东西。
有没有像"OPTIMIZE_OUTPUT_FOR_C++“这样的选项?
谢谢约翰
我一直在编写一个简单的测试来比较c++在python上的速度改进。我的结果出乎意料,c++几乎和用python编写的程序一样慢。我猜在python函数的循环中有一些东西是使用迭代器或其他什么的。
C++代码
#include <ctime>
#include <chrono>
using namespace std;
using namespace chrono;
void mult(int* a, int b)
{
for (size_t i = 0; i < 100000000; i++)
{
a[i] *= b;
}
问题
我想要创建一个数据类型,这将允许快速访问和修改其元素。是否有可能在Haskell中创建一个结构和函数,其执行速度与简单的C++实现一样快?
问题详细信息
我在用Haskell写一个编译器。我有一个数据类型表示的,让我们考虑下面的一个:
import Prelude hiding (id)
-- this is a sample data type, the real one has got a lot of constructors
data AST = A { id :: Int, x :: AST, y :: AST, z :: AST }
| B { id ::
我最近开始重新学习C++,因为我已经十多年没有用C++编写代码了。我很少使用STL,即使我在SGI工作的时候也是如此,我想掌握它。我已经订购了一本书,目前正在运行不同的在线教程。
其中一个教程介绍了std::find(begin(),end(),value),我对它在我编写的测试代码中的速度感到震惊。经过反复试验,我发现s.find(value)显然是我应该使用的。
为什么代码中的第一个查找速度如此之慢?
set<int> s;
for (int i = 0; i < 100000; i++)
s.insert(rand());
for (int i = 0; i
数据结构有变异操作和非变异操作。例如,字典插入可以更改其基础数据结构的状态,但查找通常不会。
一些数据结构会变异它们的内部结构--即使是在逻辑上不发生变异的操作--但是以一种不会改变可观察状态的方式。例如,在查找时将元素移动到根,而则将元素移动到查找时的头部。从逻辑上讲,这组键不受此操作的影响。
在C++中,这可以通过定义一个具有const方法但具有数据成员的数据结构来实现。在Haskell有办法这样做吗?我唯一能想到的就是
setContains :: Set k -> k -> (Set k, Bool)
但这是丑陋的,因为底层的数据结构改变了接口。
数据结构的核心是链接列表。由于指针和所有这些,学生们常常发现它有点困难(当用C++实现时)。但是,如果我们把它与LinkedList in C#进行比较,就会更容易理解,也不会大惊小怪,等等。那么(对40年前写的旧书没有什么不敬之处),与C# LinkedList相比,我们还应该在课程或软件工程中使用C++ LinkList吗?