在下面给出的代码中,我想实现一个标志(或同样简单的东西),它具有与注释本地设置和使用全局设置一些相同的效果(在此示例中产生两个不同的数字),并使用其他时间的本地设置(在此示例中产生两个相同的数字).
我已经尝试了明显的"if"和"switch"结构而没有成功.
#include <iostream>
#include <random>
void print();
std::seed_seq seed{1, 2, 3, 4, 5};
std::mt19937 rng(seed); // *global* initial state
std::uniform_real_distribution<> rand01(0, 1);
int main()
{
print();
print();
return 0;
}
void print()
{
std::mt19937 rng(seed); // *local* initial state
std::cout << rand01(rng) << std::endl;
}
Run Code Online (Sandbox Code Playgroud) 在完成CLRS Intro to Algorithms一书并试图在常见的lisp中实现红黑二叉搜索树时,我遇到了以下问题:圆形指针:
(defstruct node (ptr nil))
(defparameter *x* (make-node))
(defparameter *y* (make-node :ptr *x*))
(setf (node-ptr *x*) *y*)
Run Code Online (Sandbox Code Playgroud)
此代码导致堆耗尽错误,可能是由于指针指向指向该指针的指针等引起的无限递归.
有没有办法防止这种无限递归发生,同时保持这里给出的指针结构?
我知道还有其他方法可以实现红黑树(例如,不使用setf),但我有兴趣在CLRS中复制命令式样式,因为常见的lisp是一种多范式语言.
PS.除了通常的左子指针和右子指针之外,CLRS中的BST还有父指针.