小编orl*_*rlp的帖子

Dijkstra的负权重算法

我们可以使用具有负权重的Dijkstra算法吗?

停!在你想到"大笑之后,你可以无休止地在两点之间跳跃并获得一条无限廉价的道路"之前,我更多地考虑单向路径.

申请将是一个山区地形,上面有点.显然,从高到低不会消耗能量,事实上,它会产生能量(因此负路径重量)!但是,除非你是查克诺里斯,否则再回去就行不通.

我想增加所有点的权重,直到它们是非负的,但我不确定这是否会起作用.

dijkstra

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

从命令行调用Python SimpleHTTPServer,没有缓存选项

在Windows 7上,我使用的是命令行

python -m SimpleHTTPServer 8888
Run Code Online (Sandbox Code Playgroud)

调用一个简单的Web服务器来提供目录中的文件,以便进行开发.

问题是服务器似乎将文件保留在缓存中.尽管有更新的文件,但仍会提供旧版本的文件.

有没有办法直接从命令行指定"无缓存"选项?

python

33
推荐指数
4
解决办法
2万
查看次数

为什么C++不支持堆栈上的动态数组?

在C99这是合法的:

void f(size_t sz) {
    char arr[sz];
    // ...
}
Run Code Online (Sandbox Code Playgroud)

但是,这个 - 动态大小的堆栈数组 - 已经在C++中被删除了,而没有在C++ 11中看到返回.

AFAIK C++是在考虑到C兼容性的情况下制作的,所以我想知道必须有一些非常好的论据,不包括这个有用的功能,对吗?

我能想到的就是:

优点

  • 允许更智能的阵列大小需要在堆栈上(临时缓冲区?),从而节省内存.
  • 减少"智能指针"(或更糟糕的是,手动错误引入delete [])和慢堆分配.
  • 与C99的兼容性.

缺点

  • 允许人们在堆栈上轻松分配过大的数组,从而产生难以调试的堆栈溢出.
  • 编译器编写者更复杂.

那么,为什么他们在导入其他C99功能时没有包含它?


为了防止这种情况被关闭为"主观"或"不具有建设性",我正在寻找来自委员会成员的引用或者讨论谈论此事的讨论的链接 - 当然还有快速的SO综述的奖励积分.

而不是将其视为小马与仓鼠的讨论,将其视为一个历史问题,仅仅关注所考虑的优势和劣势(如果有的话).


编辑:正如James McNellis在下面的评论中所指出的,C++标准化可变长度数组之前存在C++.你可能会把我的问题读作:" 为什么没有,他们不会添加它? ".

c++ standards stack dynamic-arrays

30
推荐指数
1
解决办法
6865
查看次数

是否可以使用恒定的额外空间反转数组?

假设我有一个数组A,在[0,n]范围内有n个唯一元素.换句话说,我有整数[0,n]的排列.

是否可以使用O(1)额外空间(原位AKA)将A转换为B,使得B [A [i]] = i

例如:

       A                  B
[3, 1, 0, 2, 4] -> [2, 1, 3, 0, 4]
Run Code Online (Sandbox Code Playgroud)

arrays algorithm inverse

29
推荐指数
1
解决办法
888
查看次数

逻辑AND,OR:是否保证从左到右的评估?

是否&& ||保证逻辑运算符()的从左到右的评估?

假设我有这个:

SDL_Event event;

if (SDL_PollEvent(&event)) {
    if (event.type == SDL_QUIT) {
            // do stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

这保证与此相同吗?

SDL_Event event;

if (SDL_PollEvent(&event) && event.type == SDL_QUIT) {
    // do stuff
}
Run Code Online (Sandbox Code Playgroud)

这也很重要,假设我们有两个要求,a并且b.因此,要求a更有可能失败b.然后说它if (a && b)比说更有效率if (b && a).

c++ operator-precedence logical-operators

27
推荐指数
1
解决办法
1万
查看次数

你如何处理公共git仓库中的敏感数据?

当你将代码保存在公共git仓库中时,如何处理秘密API密钥,哈希盐等敏感数据?

显然,将敏感数据保留在代码中会对其造成损害.

另一种解决方案是不对代码中的秘密信息进行硬编码,而是将其存储在独立文件中并对文件进行gitignore.这样做的缺点是,当有人第一次提取您的代码时,秘密信息将会丢失,并且不会开箱即用.这可以通过在代码中编写"初始化,如果缺少"例程来解释,但是然后你让git系统滑入你的代码,这对IMO来说不是一件好事.

另一个解决方案是制作一个"默认"秘密信息文件,在项目开始时提交它,然后使用您自己的信息而不提交它.但这可能会让git抱怨你在拉动时有未提交的更改.

那么处理这个问题的常用方法是什么?

git sensitive-data

21
推荐指数
2
解决办法
4972
查看次数

为什么交换多维数组不是noexcept?

我有以下代码段:

#include <algorithm>
#include <iostream>

int main(int argc, char** argv) {
    int x[2][3];
    int y[2][3];

    using std::swap;
    std::cout << noexcept(swap(x, y)) << "\n";

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

使用GCC 4.9.0打印0.我不明白为什么.

根据标准,有两个重载std::swap:

namespace std {
    template<class T> void swap(T& a, T& b) noexcept(
        is_nothrow_move_constructible<T>::value &&
        is_nothrow_move_assignable<T>::value
    );

    template<class T, size_t N>
    void swap(T (&a)[N], T (&b)[N]) noexcept(noexcept(swap(*a, *b)));
}
Run Code Online (Sandbox Code Playgroud)

在我的理解noexcept中,数组的说明符应该递归地用于多维数组.

为什么不交换多维数组noexcept


在尝试找到一个仍然表现得很奇怪的最小例子时,我想出了以下内容:

#include <iostream>

template<class T> struct Specialized      : std::false_type {};
template<>        struct Specialized<int> : …
Run Code Online (Sandbox Code Playgroud)

c++ swap noexcept

21
推荐指数
1
解决办法
576
查看次数

为dyn对象实现特征时的神秘生命问题

考虑以下玩具示例:

use std::cmp::Ordering;

pub trait SimpleOrder {
    fn key(&self) -> u32;
}

impl PartialOrd for dyn SimpleOrder {
    fn partial_cmp(&self, other: &dyn SimpleOrder) -> Option<Ordering> {
        Some(self.cmp(other))
    }
}

impl Ord for dyn SimpleOrder {
    fn cmp(&self, other: &dyn SimpleOrder) -> Ordering {
        self.key().cmp(&other.key())
    }
}

impl PartialEq for dyn SimpleOrder {
    fn eq(&self, other: &dyn SimpleOrder) -> bool {
        self.key() == other.key()
    }
}

impl Eq for SimpleOrder {}
Run Code Online (Sandbox Code Playgroud)

这不编译.它声称在实施过程中存在一个终身问题partial_cmp:

error[E0495]: cannot infer an appropriate lifetime due …
Run Code Online (Sandbox Code Playgroud)

traits lifetime rust

19
推荐指数
1
解决办法
932
查看次数

ctypes vs C扩展

我有一些用C语言编写的游戏项目函数.这些函数被调用了很多(大约每秒2000-4000次).函数用C语言写入原始速度.

现在,我将这些函数包含到Python中的最简单方法就是使用ctypes.另一种方法是围绕这些函数为Python编写一个C扩展(这需要相当多的额外工作).所以我想知道,不包括DLL的初始加载,开销有多大ctypes


我正在使用Python 2.7(标准CPython版本),我不想使用像Cython这样的外部库.

我知道之前已经问过这个问题,但是我没有看到很多关于这两个选项之间性能比较的信息.

c python ctypes overhead

18
推荐指数
2
解决办法
5559
查看次数

有没有办法为符合标准的向量实现插入方法?

首先,假设A是一个类型:

  • 可能抛出的复制构造函数/赋值运算符.
  • 没有移动构造函数/赋值.

这是C++ 03 RAII类型的常见示例.现在让我引用C++ 14标准(剪掉不相关的部分):

§23.2.1一般容器要求

11除非另有规定(见......和23.3.6.5),本条款中定义的所有容器类型均满足以下附加要求:

  • 如果在插入单个元素时由insert()emplace()函数抛出异常,则该函数不起作用.

§23.3.6.5 vector修饰符

iterator insert(const_iterator position, const T& x);
...
Run Code Online (Sandbox Code Playgroud)

1 备注:如果新大小大于旧容量,则会导致重新分配.如果没有重新分配,插入点之前的所有迭代器和引用仍然有效.如果除了复制构造函数之外抛出异常,则移动构造函数,赋值运算符或移动赋值运算符T或通过任何InputIterator运算都没有效果.如果在在端部插入单个元件和抛出异常TCopyInsertableis_nothrow_move_constructible<T>::valuetrue,没有影响.否则,如果非移动构造函数抛出异常,CopyInsertable T则不指定效果.

2 复杂性:插入元素的数量加上到向量末尾的距离是复杂的.

现在考虑一下:

std::vector<A> v(5);
v.reserve(10);
v.insert(begin() + 2, A());
Run Code Online (Sandbox Code Playgroud)

显然我们正在插入单个元素,因此§23.2.1 - 11适用,操作成功或v不变.§23.3.6.5对此没有任何改变.复制构造函数抛出异常.我们最后没有插入.不使用移动构造函数.

但是现在考虑在插入的实现过程中这种可能的情况,假设没有重新分配:

01234_____ initial state
0123_4____ making space by copying
012_34____ continued
012?34____ continued, but copy operation threw …
Run Code Online (Sandbox Code Playgroud)

c++ language-lawyer

17
推荐指数
1
解决办法
217
查看次数