假设我有一些功能:
Foo GetFoo(..)
{
...
}
Run Code Online (Sandbox Code Playgroud)
假设我们既不知道这个函数是如何实现的,也不知道Foo的内部结构(例如,它可能是非常复杂的对象).但是我们知道函数正在按值返回Foo,并且我们希望将此返回值用作const.
问题:将此函数的返回值存储为总是一个好主意const &吗?
const Foo& f = GetFoo(...);
Run Code Online (Sandbox Code Playgroud)
代替,
const Foo f = GetFoo(...);
Run Code Online (Sandbox Code Playgroud)
我知道编译器会返回值优化,可能会移动对象而不是复制它,所以最终const &可能没有任何优势.不过我的问题是,有什么缺点吗?为什么不应该只发展肌肉的内存总是使用const &存储因为我不必依赖于编译器优化和事实,即使移动操作可以为复杂的对象昂贵的返回值.
将此扩展到极端,为什么我不应该总是使用const &我的代码中不可变的所有变量?例如,
const int& a = 2;
const int& b = 2;
const int& c = c + d;
Run Code Online (Sandbox Code Playgroud)
除了更冗长,还有什么缺点吗?
默认的matplotlib图看起来真的没有吸引力,甚至不专业.我尝试了几个软件包,包括seaborn和prettyplotlib,但这两个方案几乎都没有改进样式.
到目前为止,我已经开始使用seaborn包了:

以下是我正在寻找的外观与上述相差甚远:

请注意第二个示例中的以下好处:
我的问题是:你认为上面是某种流行的主题或风格,我可以在matplotlib中快速使用吗?或者,如果我可以从一些包中使用?如果不这样做,那么将这种风格设定为我的全球偏好吗?如果失败了,是否有可能在matlibplot中这样做?
谢谢!
我不理解PID控制器的组成部分.让我们假设来自维基百科的这个伪代码:
previous_error = 0
integral = 0
start:
error = setpoint - measured_value
integral = integral + error*dt
derivative = (error - previous_error)/dt
output = Kp*error + Ki*integral + Kd*derivative
previous_error = error
wait(dt)
goto start
Run Code Online (Sandbox Code Playgroud)
积分在开始时设置为零.然后在循环中它整合了错误随着时间的推移.当我对测量值或设定值进行(正)变化时,误差将变为正值,积分将在整个时间内(从头开始)"吃掉"值.但我不明白的是,当误差稳定回零时,积分部分仍然会有一些值(随时间积分的误差),并且仍然会对控制器的输出值有所贡献,但它不应该.
请问有人解释一下吗?
在 4 个 A6000 GPU 上运行分布式训练时,出现以下错误:
[E ProcessGroupNCCL.cpp:630] [Rank 3] Watchdog caught collective operation timeout: WorkNCCL(OpType=BROADCAST, Timeout(ms)=1800000) ran for 1803710 milliseconds before timing out.
[E ProcessGroupNCCL.cpp:390] Some NCCL operations have failed or timed out. Due to the asynchronous nature of CUDA kernels, subsequent GPU operations might run on corrupted/incomplete data. To avoid this inconsistency, we are taking the entire process down.
terminate called after throwing an instance of 'std::runtime_error'
what(): [Rank 2] Watchdog caught collective operation timeout:
WorkNCCL(OpType=BROADCAST, Timeout(ms)=1800000) ran …Run Code Online (Sandbox Code Playgroud) 显然整数在 Python 中需要 24 个字节。我可以理解这样做是因为表示无限数字的额外花里胡哨。然而,看起来布尔数据类型也花费了 24 个字节,即使它可能只代表两个值。为什么?
编辑:我不是要求最好的方式来存储布尔值。我已经从其他答案中了解到 NumPy、BitArray 等。我的问题是为什么,而不是如何。只是为了清楚和专注,我已经删除了问题的第二部分。
假设我想编写一个接收指针的函数.但是我想允许调用者使用裸指针或智能指针 - 无论他们喜欢什么.这应该是好的,因为我的代码应该依赖于指针语义,而不是指针实际实现的方式.这是一种方法:
template<typename MyPtr>
void doSomething(MyPtr p)
{
//store pointer for later use
this->var1 = p;
//do something here
}
Run Code Online (Sandbox Code Playgroud)
上面将使用duck typing并且可以传递裸指针或智能指针.当传递的值是基指针时我们需要查看是否可以转换为派生类型.
template<typename BasePtr, typename DerivedPtr>
void doSomething(BasePtr b)
{
auto d = dynamic_cast<DerivedPtr>(b);
if (d) {
this->var1 = d;
//do some more things here
}
}
Run Code Online (Sandbox Code Playgroud)
上面的代码适用于原始指针,但不适用于智能指针,因为我需要使用dynamic_pointer_cast而不是dynamic_cast.
上面问题的一个解决方案是我添加了一个新的实用工具方法,类似于universal_dynamic_cast通过选择使用的重载版本在原始指针和智能指针上工作std::enable_if.
我的问题是,
shared_ptr在我们的库公共API中使用?我知道这取决于库的目的,但是使用shared_ptr所有API签名的一般感觉是什么?假设我们只需要支持C++ 11.shared_ptr<MyBase>会牺牲灵活性来让调用者传递包含在任何指针中的任何东西,但是我的代码的读者会更自信,并且可以在应该进入的内容上构建更好的模型.在C++公共库API中,是否有这样或那样的一般偏好/优势?template<typename T>并让调用者决定T是否是某种指针类型或引用或类.如果我必须在T中调用某些东西,这种超级泛型方法显然不起作用,因为C++需要解除引用指针类型,这意味着我必须创建实用程序方法,例如universal_deref使用std::enable_if将*运算符应用于指针类型但不对普通对象执行任何操作.我想知道是否有任何设计模式可以更容易地实现这种超级通用方法.最重要的是,是否值得去解决所有这些问题,或者只是保持简单并 …几乎每本教科书和 CS 课程中都引用了两种实现哈希函数的基本方法:
k mod m选择 m 作为素数,不太接近 2 的幂。大多数教科书和课程都引用了方法 1 的几个缺点,包括它很昂贵并且事情取决于 m。但是,我从未见过任何教科书或课程提到方法 2 的单一缺点。
这使得方法 2 更可取。此外,方法 2 在现代计算机上可以非常有效地消除浮点运算。所以看起来方法 2 是绝对的赢家,没有人应该谈论方法 1。但显然情况并非如此。事实上,我从未见过在任何实际实现中使用方法 2。所以它确实有一些缺点。
问题是它们是什么,为什么尽管方法 1 有缺点,但为什么会更频繁地使用它?
如何在Eigen库中获取Vector3f或其他类型的文本表示形式。我看到了许多使用.format()并返回WithFormat类的示例。然后可以与cout一起使用。但是,我正在寻找以某些人类可读形式将Vector3f作为std:string获取的方法。确切的格式不太重要,因此,如果Eigen具有任何默认格式,那么效果也很好。
注意:我当然可以使用stringstream代替cout,但是我希望有更直接的方法可以做到这一点。
看起来将 Eigen 类型与 STL 容器一起使用非常混乱,需要特别注意对齐问题。我的问题是我计划创建具有数十个类的复杂类层次结构,这些类可能包含一个或多个特征类型作为成员变量。从文档看来,只要您在成员变量中包含 Eigen 类型,您的类就会“感染”与 Eigen 类型相同的问题。这意味着我必须格外小心地使用 STL 容器,不仅用于 Eigen 类型,而且还用于我所有的几十个类。
让我担心的更糟糕的部分是,任何在他们的代码中使用我的类的实例的人都会遇到同样的问题,并且需要成为这方面的专家——即使我的类没有在他们的公共接口中公开任何特征类型!
这很令人沮丧。我的问题,
我现在有点没钱了...
尝试1
在Powershell中使用iwr。它可以工作,显示进度,但速度慢10倍,直到文件在内存中才刷新:(。
powershell -command "& { iwr https://github.com/mitchellspryn/AirsimHighPolySuv/releases/download/V1.0.0/SUV.zip -OutFile SUV.zip }"
Run Code Online (Sandbox Code Playgroud)
尝试2
在Powershell中使用.Net webclient。它有效,但是没有任何进展,您无法通过Ctrl + C :(。终止。
powershell -command "& { (New-Object System.Net.WebClient).DownloadFile('https://github.com/mitchellspryn/AirsimHighPolySuv/releases/download/V1.0.0/SUV.zip', 'SUV.zip') }"
Run Code Online (Sandbox Code Playgroud)
尝试3
在Powershell中使用BITS传输。它可以工作,显示进度并且几乎完美……直到您发现它神秘地在GitHub上不起作用(错误禁止403)!
powershell -command "& { Start-BitsTransfer -Source https://github.com/mitchellspryn/AirsimHighPolySuv/releases/download/V1.0.0/SUV.zip -Destination SUV.zip }"
Run Code Online (Sandbox Code Playgroud) c++ ×3
python ×3
c++11 ×2
eigen ×2
eigen3 ×2
algorithm ×1
command-line ×1
controller ×1
distributed ×1
gpu ×1
hash ×1
hashtable ×1
integral ×1
matplotlib ×1
plot ×1
powershell ×1
pytorch ×1