【问题标题】:C++ - selecting a set of features [closed]C ++ - 选择一组功能[关闭]
【发布时间】:2012-07-17 17:04:23
【问题描述】:

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

这里我想问的主要部分是:

  1. 您认为以此处制作的方式插入功能是否是个好主意?也就是说,作为struct的向量?或者,只是立即添加功能?我制作 struct 向量的原因是我想将整数值添加到向量中,但同时要为特征命名(即 F1、F2、...等)。

  2. 对于下面显示的criterionFunction(),我正在尝试考虑例如features[1],如果它被选中(即;传递给函数),则其值为1,否则为0 .好像boolean 发生了什么事? :-) 你建议在这里做什么?


#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];
}

谢谢。

【问题讨论】:

  • 为什么不花点时间让标准函数清晰可见呢?简单并减少错误。此外,还会增加任何人阅读您的代码的风险
  • std::struct 是什么?
  • 使用enum 怎么样?不过,不确定这是否适用于第二部分。
  • 还有:std::int?标准::结构?!这是什么魔法?
  • 看起来有人试图在毫无头绪的情况下将蹩脚的自动生成的 C 代码翻译成“现代 C++”

标签: c++ vector struct boolean


【解决方案1】:

这里有一些编译和类似 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());
}

【讨论】:

    【解决方案2】:

    我有一段时间没有接触 C++,但我对你想要做什么感到困惑。根据您的问题和示例代码,我觉得您混淆了 vector 所做的事情。

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

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

    您正在收集 4 个 Features 结构。 (即 16 个整数的空间,4 个 4 个组,我认为您只需要 4 个)。

    如果Features 中总是有4 个整数,我会坚持使用结构。如果你想给它们命名并且数量可变,你需要使用 Map 之类的东西。

    【讨论】:

      猜你喜欢
      • 2021-11-02
      • 2013-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 2019-03-19
      • 2013-07-14
      • 1970-01-01
      • 2023-01-11
      相关资源
      最近更新 更多