gpt4 book ai didi

C++ 案例声明?

转载 作者:行者123 更新时间:2023-11-28 08:28:34 25 4
gpt4 key购买 nike

很难说出这里问的是什么。这个问题是模棱两可的、模糊的、不完整的、过于宽泛的或修辞的,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开它,visit the help center .




11年前关闭。




我正在尝试使数字电子问题适应基于 C++ STL 的程序。

最初我有 4 个输入 C1、C2、C3、C4。这意味着我总共有 16 种组合:

0000
0001
.
.
.
1111

我有一个由定义的 multimap
typedef std::pair<int, int> au_pair; //vertices
typedef std::pair<int, int> acq_pair; //ch qlty
typedef std::multimap<int, acq_pair> au_map;
typedef au_map::iterator It_au;

没有。模拟量取决于 au_map 的大小.
例如:如果 au_map.size() = 5我将有 C1、C2、C3、C4、C5。因此 2^5 = 32 例。

例如:
如果 au_map.size()=4 ,我需要为 16 个案例模拟我的算法。
for(It_au it = a_map.begin(); it != a_map.end(); it++)
{
acq_pair it1 = it->second;
//case 0:
//C3 = 0, C2 = 0, C1 = 0, C0 = 0
//Update it1.second with corresponding C values

//simulate algorithm

//case 1:
//C3 = 0, C2 = 0, C1 = 0, C0 = 1
//simulate

.........
//case 15:
//C3 = 1, C2 = 1, C1 = 1, C0 = 1
//simulate

}

最佳答案

不是最好的主意。现在,您通过手动设置 C1-C4 并在 for 中编写一些模拟例程来做很多无用的工作。环形。

自动化它。

使用一些摘要State-Simulator映射器(Simulator 实际上代表一些具体的功能对象)。

typedef char State;

struct basic_simulator {
// You could also pass some other parameters to your
// simulator
virtual void operator()(...) = 0
};

struct concrete_simulator : public basic_simulator {
virtual void operator()(...) {
// Do something concrete
// Trolololo
}
};

typedef basic_simulator Simulator;

在这种情况下,您的实际包装器看起来像 std::map<State, Simulator*> map;
您接下来需要做的是从您的状态中获取 C1-C4 值,该状态定义为 char .使用位运算符。

您的所有状态都可以定义为 0-15数字转换为二进制 ( 2 -> 0010 )。因此,要获得 C1-C4 值,您只需进行适当的转换:
// C1 C2 C3 C4
// -----------
// 1 1 1 1
State state = 15;

for (int i = 3; i >= 0; i--) {
// State of some of the inputs, defined by one bit
InputState C_xx = ((state >> i) & 1);
}

现在只需映射所有这些 0-15状态到适当的模拟仿函数:
std::map<State, Simulator*> mapper;
// Generally speaking, you should use some sort of
// smart pointer here
mapper[0] = new concrete_simulator(...);
mapper[1] = ...

真正酷的是你只能拥有 3 或 4 个具体的模拟器,它们将相应地映射到某些状态。

在这种情况下,调用实际模拟将意味着:
  // Fire appropriate simulation object
(*(mapper[actual_state]))(...);

并且进行每一个可能的模拟意味着迭代每个 map 元素。

更新:相同的技术可用于拥有超过 的州。 4 输入/单输入状态可以有多个 两个 可能的值。

只需编写适当的映射函数和状态生成器。

关于C++ 案例声明?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3110975/

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