小编Jam*_*ens的帖子

列出涵盖典型 CS 本科生主题的书籍清单

我想涵盖相当于典型的 CS 本科生课程的材料,因此我列出了涵盖典型主题的书籍清单。我已将列表分成几个主题,根据我所做的研究,我认为这些主题是强制性的和可选的。我需要一些帮助来确认主题是否正确拆分,以及书籍是否具有正确的级别。另外,如果我遗漏了任何重要的主题,或者任何超出了本科水平,请告诉我。

感谢您的时间!

关于暂停状态的编辑:我不认为这个问题是题外话,因为我不是在要求推荐书籍 - 我是问我列出的主题是否表明典型的 CS 课程,以及是否有任何重要的主题缺失。书籍链接仅在我选择的书籍与主题不正确的情况下才存在,并且可以在必要时删除。


强制性的

操作系统:操作系统概念

网络:计算机网络:自上而下的方法

离散数学:具体数学

数据结构与算法:算法导论

计算机体系结构:计算机系统:程序员的视角

自动机理论:计算理论导论

Compilers: Engineering a Compiler被推荐给我而不是龙书。

数据库理论:数据库系统导论

编程语言概念与设计:编程语言语用学

可选的

密码学:密码学工程:设计原理和实际应用

函数式编程:向你学习 Haskell 的好处!

人工智能:人工智能:一种现代方法

计算机图形学:实时渲染

computer-science

5
推荐指数
1
解决办法
874
查看次数

C++ - 如何正确地将double转换为int

我正在编写一个需要占据平方根的程序.由于我采用平方根的值是正数,我只是将其转换为int.所以说以下示例:

int i = 16;
int j = std::sqrt(i)
Run Code Online (Sandbox Code Playgroud)

j应为4.

我想知道,是否有可能sqrt返回3.9999999991而不是4.000000001或其他什么,j的结果是3?是否有定义浮点行为的规则?我怎样才能正确地将其转换为int?

c++ precision double int casting

5
推荐指数
1
解决办法
1837
查看次数

类模板声明中的C ++嵌套类

我正在尝试编写C ++ 11链表实现,链表是模板类,其节点是嵌套类,如下所示:

template <typename T>
class LinkedList {
public:
    class Node;
    std::shared_ptr<Node> listSearch(const T &input) const;

private:
    std::shared_ptr<Node> head;
    std::shared_ptr<Node> tail;
};

template <typename T>
class LinkedList<T>::Node {
private:
    T data;
    std::shared_ptr<Node> next;
}
Run Code Online (Sandbox Code Playgroud)

我假设Node类本身不是模板,但是当LinkedList实例化时,它也会创建Node类。

当我尝试如下定义listSearch函数时,出现错误:“模板类型参数的模板参数必须是类型;您忘记了'typename'吗?”。有人可以解释什么地方不对吗?

template <typename T>
std::shared_ptr<LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) { ... }
Run Code Online (Sandbox Code Playgroud)

编辑:

好的,所以我重新编译了gcc,错误消息更加清晰了。它需要以下内容:

std::shared_ptr<typename LinkedList<T>::Node> LinkedList<T>::listSearch(const T &input) const { ... }
Run Code Online (Sandbox Code Playgroud)

为什么在LinkedList :: Node之前需要类型名?这种类型不是很明显吗?

templates nested class c++11

5
推荐指数
1
解决办法
2779
查看次数

随机数类内初始化

我目前正在创建一个类,我希望每次创建对象时,其中一个私有成员都会使用随机数进行初始化.以下代码没有问题:

private:
    unsigned random = rand() % 10;
Run Code Online (Sandbox Code Playgroud)

但是,我想使用C++ 11随机引擎和发行版来做到这一点.我希望能够按照以下代码执行某些操作,这些代码将无法编译,但会对我正在尝试执行的操作有一个大概的了解:

private:
unsigned random = distribution(mersenne_generator(seed));

static std::random_device seed_generator;
static unsigned seed = seed_generator(); //So that it's not a new seed each time.
static std::mt19937 mersenne_generator;
static std::uniform_int_distribution<unsigned> distribution(0, 10);
Run Code Online (Sandbox Code Playgroud)

这段代码不会编译,因为我试图在类中定义一些静态成员.但是,我不确定在哪里定义它们.我可以创建一个初始化所有内容的成员函数,但是我必须在main中运行它,我不想这样做.我想整理出类中的所有随机定义,这样当我在main中创建一个对象时,它将隐式创建随机数.有什么建议?

c++ random initialization c++11

3
推荐指数
1
解决办法
2950
查看次数

C++ clang数组比clang向量和gcc向量和数组快得多

下面的代码显示了我的测试用例.我用clang ++ --std = c ++ 11 -O2和g ++ --std = c ++ 11 -O2编译了两者.


long long *ary = new long long[100000000]();
for (long long i = 0; i < 100000000; ++i)
    ary[i] = i;
Run Code Online (Sandbox Code Playgroud)
std::vector<long long> vec(100000000, 0);
for (long long i = 0; i < 100000000; ++i)
    vec[i] = i;
Run Code Online (Sandbox Code Playgroud)

对于我来说,我只进行了初始化测试,然后是初始化和for循环.结果如下:

GCC:

  • 仅限阵列初始化:0.182秒
  • 数组初始化和for循环:0.250s
  • 仅矢量初始化:0.169s
  • 向量初始化和for循环:0.252

铛:

  • 仅限阵列初始化:0.004s
  • 数组初始化和for循环:0.004s
  • 仅矢量初始化:0.150
  • 矢量初始化和for循环:0.240s

gcc结果与传统认为向量与数组一样快.而且,矢量的clang和gcc结果非常一致.然而,铿锵声的结果是荒谬的,阵列表现得相当快.任何人都知道为什么会这样?

arrays performance gcc clang c++11

3
推荐指数
1
解决办法
666
查看次数

如果首先使用非const初始化,为什么允许对const的非const引用?

可以理解,编译器将不允许以下内容:

const int ci = 1000;
int &r = ci;
Run Code Online (Sandbox Code Playgroud)

因为这意味着我可以尝试通过r来改变ci的值,但ci是const.

为什么然后允许以下内容,除了首先为r分配非const int之外,它与上面相同?

int i;
const int ci = 1000;
int &r = i;
r = ci;
Run Code Online (Sandbox Code Playgroud)

如果您尝试通过r更改ci,则ci将保持相同的值.然而,与第一个示例不同,它不会被编译器捕获.对此有解释吗?

c++ const reference

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

C++嵌套条件运算符的评估顺序

对于像这样的表达式

x = a ? b : c ? d : e;
Run Code Online (Sandbox Code Playgroud)

我理解,因为?:运算符具有正确的关联性,所以表达式被分组为

x = a ? b : (c ? d : e);
Run Code Online (Sandbox Code Playgroud)

但是,评估顺序呢?结合性是否意味着首先评估(c?d:e)分支,然后它的答案作为参数传递给左?:运算符?或者首先进行评估,然后根据返回b或评估(c?d:e)分支?还是未定义?

c++ evaluation conditional operator-keyword

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