C ++ - 选择一组功能

时间:2012-07-18 15:40:55

标签: c++ vector struct boolean

我正在尝试在vector中插入要素列表,然后,根据标准函数(即公式)结果添加要素。到目前为止的代码如下所示。

我想问的主要部分是:

  1. 您认为以这里制作的方式插入功能会是个好主意吗?也就是说,作为结构的向量?或者,只需立即添加功能?我创建struct的向量的原因是我想要向向量添加整数值,但同时要为要素添加名称(即:F1,F2,...等)。

    < / LI>
  2. 对于下面显示的criterionFunction(),我试图考虑例如features[1]如果选择了值1(即传递给函数) )和0否则。这似乎是boolean正在发生的事情? :-)你建议在这做什么?


  3. #include "stdafx.h"
    #include <iostream>
    #include <vector>
    
    int main(){
        std::struct Features{ int F1, F2, F3, F4; };
    
        std::vector<Features> listOfFeatures(4);
        for(std::vector<Features>::iterator i = listOfFeatures.begin(); i != listOfFeatures.end(); i++)
        {
            std::int maxValue = criterionFunction(*listOfFeatures);
        }
    }
    
    std::int criterionFunction(std::int *features)
    {
        return
            -2*features[1]*features[2]
            +3*features[1]
            +5*features[2]
            -2*features[1]*features[2]*features[3]
            +7*features[3]
            +4*features[4]
            -2*features[1]*features[2]*features[3]*features[4];
    }
    

    感谢。

2 个答案:

答案 0 :(得分:2)

这是一些编译和类似C ++的东西,我希望它可以帮助你:

修改添加算法以将所有要素实际转换为标准列表并获取其实际最大值。

#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>

struct Features{ int F1, F2, F3, F4; };

int criterionFunction(Features const& features)
{
    return
        -2*features.F1*features.F2
        +3*features.F1
        +5*features.F2
        -2*features.F1*features.F2*features.F3
        +7*features.F3
        +4*features.F4
        -2*features.F1*features.F2*features.F3*features.F4;
}
int main(){

    std::vector<Features> listOfFeatures(4);
    // TODO fill listOfFeatures

    std::vector<int> listOfCriterion;
    std::transform(listOfFeatures.begin(), listOfFeatures.end(), 
            std::back_inserter(listOfCriterion), 
            criterionFunction);

    int maxValue = *std::max_element(
            listOfCriterion.begin(), listOfCriterion.end());
}

答案 1 :(得分:0)

我有一段时间没有接触过C ++,但我对你要做的事感到困惑。根据您的问题和示例代码,我得到的结论是您正在混淆vector所做的事情。

向量是可以动态调整大小的对象集合。当你打电话

std::vector<Features> listOfFeatures(4);

您正在制作功能结构的 4 的集合。 (即,16个整数的空间,4个4组,我认为你只需4个。)

如果功能中总有4个整数,我会坚持使用结构。如果你想为它们命名并且数量可变,你需要使用像Map这样的东西。