我有一个向量vector<Gate*> PI_Gates
,它可以包含字符0,1,D,D`(D Not)和X.根据向量中的字符组合,我将设置一个输出一些价值。这是我到目前为止所做的一个例子:
if(GateType== GATE_NAND)
{
for(int i=0; i<PI_Gates.size(); i++)
{
if(PI_Gates[i]->getValue() == LOGIC_DBAR)
{
MyGate->setValue(LOGIC_D);
}
else if(PI_Gates[i]->getValue() == LOGIC_ZERO)
{
MyGate->setValue(LOGIC_ONE);
}
else if(PI_Gates[i]->getValue() == LOGIC_X)
{
MyGate->setValue(LOGIC_X);
}
else if(PI_Gates[i]->getValue() == LOGIC_ONE)
{
}
}
此代码用于分析门级电路并输出结果。对于输入值为D,0或X的情况,我的输出在那时确定,因为它们具有逻辑优先级。但是,对于这个特定的逻辑门,如果我的所有输入都是逻辑1,那么我的输出将为逻辑0。同样,当所有输入都是逻辑D时,我的输出将是逻辑D而不是。如果输入是逻辑1和逻辑D的组合,则输出仍然是逻辑D。因此,我需要找到一种方法来搜索我的向量并确定我的输入是否如下:所有逻辑1,所有逻辑D,逻辑1和D的组合。这就是我被卡住的地方。我无法想出一个好方法。
我想我更简单的术语,就像你有一个包含数字1,2,3,4和5的向量,你想要检查所有值是4还是5,如果它们是,那么做一些完成向量迭代后的操作。解决方案可能很简单,但我认为我在脑海中复杂化了。
提前致谢。
答案 0 :(得分:0)
对于你正在做的事情,一个简单的查找就可以了:
const std::string valid_values[] =
{ "0", "1", "D", "/D" /* D Not */, "X"};
//...
std::string * const end_ptr = &valid_values[sizeof(valid_values)];
const std::string value = PI_Gates[i]->getValue();
size_t position = find(&valid_values[0], // begin
end_ptr, // End
value);
if (position != end_ptr)
{
// The gate name was found
MyGate->setValue(value);
}
如果您想要更多功能,可以使用std::map<string, function pointer>
并将功能与门名称相关联。包含门名称和函数指针的结构表也可以使用。