Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/149.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 发现资源不足_C++ - Fatal编程技术网

C++ 发现资源不足

C++ 发现资源不足,c++,C++,我有一个包含以下类型变量的结构向量: Date Time Low 11/1/17 929 74.25 11/1/17 930 73 11/1/17 931 75 11/1/17 932 70 等等 现在我想在向量中添加另一个结构,称为“LowRun”,其中LowRun是迭代中每个点的最小low,如下所示: Date Time Low LowRun 11/1/17 929 74.25 74.25 11/1/1

我有一个包含以下类型变量的结构向量:

Date      Time   Low
11/1/17   929    74.25
11/1/17   930    73
11/1/17   931    75
11/1/17   932    70
等等

现在我想在向量中添加另一个结构,称为“LowRun”,其中LowRun是迭代中每个点的最小low,如下所示:

Date      Time   Low    LowRun
11/1/17   929    74.25   74.25
11/1/17   930    73      73
11/1/17   931    75      73
11/1/17   932    70      70
这是我到目前为止尝试过的,但没有给出正确的输出:

edited:


int CalcLow_SoFar(std::vector<PriceInfo>& p)


    double running_low = p[0].Low;

    for (size_t i = 1; i < p.size(); ++i)
    {


        if (p[i].Time > 929
            && p[i].Time < 1601
            && p[i].Date == p[i - 1].Date)


        { 


            if (p[i].Low < running_low)
                {
                    running_low = p[i].Low;
                    p[i].LowRun = running_low;

                } 


        }

    }

    return 0;

}
编辑:
内部CalcLow_SoFar(标准::矢量和p)
双运行_low=p[0]。低;
对于(大小i=1;i929
&&p[i].时间<1601
&&p[i].Date==p[i-1].Date)
{ 
if(p[i].低<低运行)
{
运行_low=p[i]。低;
p[i].低运行=低运行;
} 
}
}
返回0;
}

你能帮我解开吗,谢谢

您的代码中有几个奇怪的逻辑问题,所以我将在这里列出它们

  • 这个if语句毫无意义:
    if(p[i].Low
    。只要当前值小于上一个值,就将
    running_low
    分配给当前值。但是,该值完全有可能在不低于运行下限的情况下降低。例如,如果您有序列
    1,3,2
    ,则索引2处的
    LowRun
    值将被分配给2,因为2小于3,即使运行下限应为1
  • 如果您出于某种原因没有将1添加到
    I
    ,那么在我所讨论的语句之后的if语句(
    if(p[I+1].Low
    )会很好。从1到
    p.size()
    -1,您现在从2到
    p.size()
    ,因此您可以访问向量末尾的一个元素,这是未定义的行为
  • 只有当
    低运行
    值更改时,您才分配了
    低运行
    值。这意味着,如果某个值没有更改运行下限,则它的
    LowRun
    值未初始化,这就是垃圾值的来源
  • 您没有初始化
    运行\u low
    到第一个元素
  • 我不知道你在做什么的细节,但是检查时间和日期的条件看起来可疑,所以我现在已经删除了它。如果是当天的第一个条目,它基本上会忽略它。如果这是您想要做的,那么不要将
    running\u low
    初始化为第一个元素的值,而是将其初始化为类似
    std::numeric\u limits::max()
    的值,这样可以保证在第一个有效条目上更新它,并将循环更改为从0开始
这不会影响功能,但与
main()
不同,您定义的其他函数不必返回int或任何值。如果不需要函数返回任何内容,请使用
void

最后,你应该养成使用良好格式的习惯,包括适当的缩进,这样你就不会混淆自己

固定代码:

void CalcLow_SoFar(std::vector<PriceInfo>& p)
{
    double running_low = p[0].Low;
    p[0].LowRun = p[0].Low;

    for (size_t i = 1; i < p.size(); ++i)
    {
        if (p[i].Low < running_low)
        {
            running_low = p[i].Low;
        }
        p[i].LowRun = running_low;
    }
}

与此答案中的第二个版本类似,
LowRun
值可能是
std::numeric\u limits::max()
,如果在该天的时间限制内还没有遇到值。

您是否尝试过初始化变量,
double running\u low=p[0]。low?如果打开编译器的警告,编译器可能会对此发出警告。堆栈溢出不是免费的调试服务,您应该显示您尝试使用调试器或其他更简单的方法(如调试打印语句)调试代码的情况。您还可以分别测试代码的每一部分,以准确地找出导致问题的代码的哪一部分,并做出正确的判断。这并不是你唯一一次在代码中遇到bug,学习调试程序比让别人帮你找到bug更有帮助。谢谢你,埃尔杰。我试过了,但没什么不同。我假设正确的方法是在for循环之外初始化它?您可能想试试。你有很多奇怪的逻辑问题。嗨,菲,我已经和鸭子谈了几天了。但我显然没有你那么有才华……谢谢你,费,注意到你的解释,我非常感激。输出结果更接近我需要的结果,但不完全如此:重新检查可疑的时间和日期,我正试图用它来限制会话的查找,将其限制在每天。因此,在迭代的任何时候,只有在930到1600的时间范围内,并且在该日期的范围内,才能找到正在运行的低点。输入文件包含一年的数据,因此大约有250天,每天从午夜到1800点。这样做有意义吗?@Eksanastatis所以你只希望运行低点包含同一天的值?这样做,我们就可以在遇到新的一天时,简单地重置
正在运行的\u low
。我还是不知道你说的关于时间的部分是什么意思。是否要忽略不在特定时间段内的条目?另外,还有
=
是来回答您上面的第一个问题。是的,是的,我想忽略930到1600窗口之外的所有内容。非常感谢Fei,虽然第二个到最后一个解决方案不起作用,但最后一个解决方案(包含930和1600)起作用了!我将研究你的代码,以确保我理解它。
void CalcLow_SoFar(std::vector<PriceInfo>& p)
{
    double running_low = std::numeric_limits<double>::max();

    for (size_t i = 0; i < p.size(); ++i)
    {
        if (p[i].Time > 929
            && p[i].Time < 1601
            && i != 0
            && p[i].Date == p[i - 1].Date
            && p[i].Low < running_low)
        {
            running_low = p[i].Low;
        }
        p[i].LowRun = running_low;
    }
}
void CalcLow_SoFar(std::vector<PriceInfo>& p)
{
    double running_low;

    for (size_t i = 0; i < p.size(); ++i)
    {
        if (i == 0 || p[i].Date != p[i - 1].Date)
        {
            running_low = std::numeric_limits<double>::max();
        }
        if (p[i].Time >= 930
            && p[i].Time <= 1600
            && p[i].Low < running_low)
        {
            running_low = p[i].Low;
        }
        p[i].LowRun = running_low;
    }
}