gpt4 book ai didi

c++ - "Industrial Strength"C++ 结构

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:37 24 4
gpt4 key购买 nike

我已经有一段时间没有使用 C++ 了。我被要求参加工作面试,为满足以下接口(interface)的下采样例程创建 C++ 结构:

struct  deterministic_sample
{
deterministic_rate( double rate );
bool operator()();
};

-- 具有以下行为:

  • 我们有一个该类的对象:deterministic_sample s;
  • 我们调用s() N 次,它返回true,M 次。 M/N大致相等的速率
  • 顺序是确定的,不是随机的,每次都应该相同
  • 类应该是“工业强度”,用于繁忙的流。

我的解决方案,版本 2:

#include <iostream>
#include <cmath>
#include <climits>

using namespace std;

struct deterministic_sample
{
double sampRate;
int index;

deterministic_sample() {
sampRate = 0.1;
index = 0;
}

void deterministic_rate( double rate ) {
this->sampRate = rate; // Set the ivar. Not so necessary to hide data, but just complying with the interface, as given...
this->index = 0; // Reset the incrementer
};

bool operator()() {

if (this->index == INT_MAX) {
this->index = 0;
}

double multiple = this->index * this->sampRate;

this->index++; // Increment the index

if (fmod(multiple, 1) < this->sampRate) {
return true;
} else {
return false;
}

};
};

int main()
{
deterministic_sample s; // Create a sampler
s.deterministic_rate(0.253); // Set the rate
int tcnt = 0; // Count of True
int fcnt = 0; // Count of False

for (int i = 0; i < 10000; i++) {
bool o = s();
if (o) {
tcnt++;
} else {
fcnt++;
}
}

cout << "Trues: " << tcnt << endl;
cout << "Falses: " << fcnt << endl;

cout << "Ratio: " << ((float)tcnt / (float)(tcnt + fcnt)) << endl; // Show M / N

return 0;
}

面试官说这个 v2 代码“部分”解决了需求。 v1 没有构造函数(我的错误),也没有处理 int ivar 的溢出。

我在这里错过了什么来使这个类(class)健壮/正确?我认为这是我错过的“工业实力”的某些方面。

附言。对于任何道德类型,我已经提交了我的第二次机会尝试......我只是很困扰知道为什么这是“部分”......

最佳答案

您所拥有的远比必要的复杂。您需要做的就是跟踪当前位置,并在超过阈值时返回 true

struct deterministic_sample
{
double sampRate;
double position;

deterministic_sample() : sampRate(0.1), position(0.0) {
}

void deterministic_rate( double rate ) {
assert(rate <= 1.0); // Only one output is allowed per input
sampRate = rate; // Set the ivar. Not so necessary to hide data, but just complying with the interface, as given...
// No need to reset the position, it will work with changing rates
};

bool operator()() {
position += sampRate;
if (position < 1.0)
return false;
position -= 1.0;
return true;
}
};

关于c++ - "Industrial Strength"C++ 结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28754041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com