小编Sod*_*der的帖子

为什么numeric_limit <T> :: min/max不是常量?

可能重复:
为什么std :: numeric_limits <T> :: max()是一个函数?

我想知道是否有人可以解释为什么背后的原因std::numeric_limit<T>::min并且max是函数而不是常量?

此外,我想知道可以使用哪些技术将min/max值用作模板参数的一部分,例如:

template<unsigned long long max>
class foo
{
public:
   void boo() { std::cout << max << std::endl; }
};

.
.
.

foo<std::numeric_limits<int>::max()> f;
f.boo();
Run Code Online (Sandbox Code Playgroud)

c++ numeric-limits

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

模拟到达时间的问题

我试图模拟事件的发生(车辆进入隧道),事实证明这是一个泊松过程.

从上午9点到下午5点,我把这一天打破了1分钟.

对于每1分钟的间隔,我已经计算/获得了平均值:

  1. 在此期间进入隧道的车辆数量.
  2. 每辆车进入隧道之间的时间(预计到达时间)

例如,对于分钟10:37-38,平均值是5辆车,平均到达时间为12秒

为了抽样10:37-38分钟,我做了以下事情:

  1. 对平均值为5的泊松分布进行采样,以确定将到达的项目数,分配给X.
  2. 采样平均值为1/12 X倍的指数分布,得出到达间隔时间y_0,y_1 ... _ y_x
  3. 将到达时间相加并分配给K.
  4. 如果K大于60秒,请转到步骤2
  5. 积累各种柜台
  6. 最后打印统计.

代码如下:

#include <iostream>
#include <cstdio>
#include <random>
#include <algorithm>
#include <iterator>

int main()
{

   double mean_num_itms = 5.0;
   double mean_inter_time = 12; //seconds
   double max_sec_in_period = 60; //seconds

   unsigned int rounds = 10000;

   std::random_device r;
   std::exponential_distribution<double> exponential(1.0 / mean_inter_time);
   std::poisson_distribution<double> poisson(mean_num_itms);

   double total_itms = 0;
   double total_inter_time = 0;

   for (std::size_t i = 0; i < rounds; ++i)
   {
      //Determine how …
Run Code Online (Sandbox Code Playgroud)

c++ simulation math sample distribution

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

与性能相关的问题将参数作为函数/方法的引用传递

将参数传递给将在短时间内调用数百万次的函数和方法时,传递所述参数的开销开始显示.

void foo(const SomeType&st){...}

对于像std :: string,std :: vector等类型...规则是通过引用传递,以便不会发生无意义的副本.然而,当处理诸如双打,英特等的POD时,故事却完全不同.

关于性能,如果函数/方法不需要改变参数,在决定是否应该通过引用,const引用或复制传递时,常见的"需要注意的事项"是什么?

void foo1(SomeType& st)
{
   ...
}

void foo2(const SomeType& st)
{
   ...
}

void foo3(SomeType st)
{
   ...
}

void foo4(SomeType* st)
{
   ...
}
Run Code Online (Sandbox Code Playgroud)
  • 是否应该通过副本传递int/unsigned int?
  • 是否应该只在64位或更高目标上通过副本传递double?
  • 如果函数可以内联 - 参数如何在物质中传递?
  • 当通过ref/const ref传入时,别名如何影响问题?
  • 在什么情况下,参数的显式副本在堆栈上是有益的?

注意:这不是关于const正确性的问题.还在32/64位平台上寻找与gcc和msvc相关的答案.

一些可能相关的问答:

"const T&arg"与"T arg"

/sf/answers/149747811/

在C++中通过引用/值传递

为什么传递const引用而不是值?

c++ performance const function pass-by-reference

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

C++ if语句中的优先级

可能重复:
短路评估是否保证在C++中与Java一样?
C++如何处理&&?(短路评估)

我有以下结构定义和特定用例:

struct foo
{
   bool boo;
};

int main()
{
  foo* f = 0;
   .
   .
   .
  if ((f) && (f->boo)) // <--- point of contention
   return 0
  else
   return 1;
}
Run Code Online (Sandbox Code Playgroud)

标准是否保证上面if语句中的第一组括号始终在第二个之前进行评估?

如果没有什么是最好的重写上面的代码?

目前我有以下一塌糊涂:

if (f)
{
   if (f->boo)
      return 0;
   else
      return 1;
}
else
   return 1;
Run Code Online (Sandbox Code Playgroud)

c++ standards operator-precedence

0
推荐指数
2
解决办法
122
查看次数