搜索矢量

时间:2016-02-11 19:00:25

标签: c++ vector

我有一个向量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,如果它们是,那么做一些完成向量迭代后的操作。解决方案可能很简单,但我认为我在脑海中复杂化了。

提前致谢。

1 个答案:

答案 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>并将功能与门名称相关联。包含门名称和函数指针的结构表也可以使用。