小编Dav*_*ill的帖子

用于链表节点的RAII样式C++类

我现在正在玩链接列表作为练习.

我在Cracking The Coding Interview书中看到的例子中没有LinkedList(管理器)类,只有Nodes,你可以在主函数中挂起头节点.

我查找了C++实现,但大多数似乎比C++更C风格,即不是面向对象的.它们使用结构体,没有类,并且有一个静态方法来删除列表,您需要明确记得调用它.我想写一个合理的RAII(资源获取是初始化)风格的C++类,带有合理的析构函数来处理内存释放,我想只使用一个Node类(没有LinkedList类).

我看到有这个工作的唯一方法是让Node的析构函数删除下一个Node,如果有的话,但是我已经读过这种递归删除是一个坏主意,因为你最终创建了一个与之相同长度的callstack.链表.

总结一下我的问题:

  • 如果编写一个面向对象的类来处理C++中的链表,你是否必须有一个LinkedList(manager)类来处理它的析构函数中列表节点的删除?
  • 如果没有,你将如何处理节点的破坏?

谢谢!

c++ algorithm memory-management raii

4
推荐指数
1
解决办法
652
查看次数

为什么cross_val_predict比KNeighborsClassifier慢得多?

在Jupyter笔记本上本地运行并使用MNIST数据集(28k条目,每个图像28x28像素,接下来的时间为27秒)

from sklearn.neighbors import KNeighborsClassifier

knn_clf = KNeighborsClassifier(n_jobs=1)
knn_clf.fit(pixels, labels)
Run Code Online (Sandbox Code Playgroud)

但是,以下过程需要1722秒,也就是说,要花费〜64 倍的时间

from sklearn.model_selection import cross_val_predict
y_train_pred = cross_val_predict(knn_clf, pixels, labels, cv = 3, n_jobs=1)
Run Code Online (Sandbox Code Playgroud)

我天真的理解是cv = 3的cross_val_predict正在执行3倍交叉验证,因此我希望它可以拟合模型3次,因此至少需要3倍的时间,但是我不知道为什么会这样花64倍!

要检查它是否特定于我的环境,我在Colab笔记本上运行了相同的东西 -差异不那么极端(15x),但仍远高于我预期的〜3x

我想念什么?为什么cross_val_predict比仅拟合模型要慢得多?

万一重要,我正在运行scikit-learn 0.20.2。

python performance machine-learning scikit-learn cross-validation

2
推荐指数
1
解决办法
278
查看次数

为什么我可以为选项分配null?

以下是Scala中的有效语句:

scala> var x: Option[Int] = Some(3)
x: Option[Int] = Some(3)

scala> var x: Option[Int] = None
x: Option[Int] = None
Run Code Online (Sandbox Code Playgroud)

以下内容无效:

scala> var x: Option[Int] = 3
<console>:7: error: type mismatch;
 found   : Int(3)
 required: Option[Int]
       var x: Option[Int] = 3
Run Code Online (Sandbox Code Playgroud)

到目前为止,这些例子对我有意义; Option [T]类型的值可以是Some [T]或None类型,因此编译器会阻止您分配既不是类型的值.

但是,Scala编译器似乎接受了这个:

scala> val x: Option[Int] = null
x: Option[Int] = null
Run Code Online (Sandbox Code Playgroud)

如果我然后尝试在选项上进行模式匹配(例如如下),我会得到我没想到的失败 - 为什么编译器不通过拒绝null的赋值来保护我?

x match {
  case Some(y) => println("Number: ", y)
  case None => println("No number")
}
Run Code Online (Sandbox Code Playgroud)

scala

0
推荐指数
1
解决办法
868
查看次数