Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/131.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++ 中断,然后继续for循环_C++_For Loop_Iterator_Break_Continue - Fatal编程技术网

C++ 中断,然后继续for循环

C++ 中断,然后继续for循环,c++,for-loop,iterator,break,continue,C++,For Loop,Iterator,Break,Continue,我构建了一个函数,它会迭代,直到找到一个大于函数给定值的值,然后中断 std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price) { std::vector<AggregatedQuoteType>::iterator i = v_BuyOrders.begin(); for (; i != v_BuyOrders.end(); ++i)

我构建了一个函数,它会迭代,直到找到一个大于函数给定值的值,然后中断

std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price)
{
   std::vector<AggregatedQuoteType>::iterator i = v_BuyOrders.begin();
    for (; i != v_BuyOrders.end(); ++i)
        if(i->get_price() >= price)        
            break;
   return i;        
}
std::vector::iterator OrderBook::find_price(价格类型价格)
{
std::vector::iterator i=v_BuyOrders.begin();
对于(;i!=v_BuyOrders.end();++i)
如果(i->get_price()>=价格)
打破
返回i;
}

然后,我希望它针对另一个函数进行测试,如果这不成立,那么在for循环中断的地方继续。这是可能的吗?

< P>如果你认为你的“另一个功能”在成功的情况下返回真实,那么,比如:

std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price)
{
    std::vector<AggregatedQuoteType>::iterator i = v_BuyOrders.begin();
    for (; i != v_BuyOrders.end(); ++i)
    {
        if(i->get_price() >= price && another_function(i))
            return i;
    }
    return v_BuyOrders.end();
}
std::vector::iterator OrderBook::find_price(价格类型价格)
{
std::vector::iterator i=v_BuyOrders.begin();
对于(;i!=v_BuyOrders.end();++i)
{
如果(i->get_price()>=price&另一个_函数(i))
返回i;
}
返回v_BuyOrders.end();
}
因为我不在for循环中,所以您也可以这样做:

std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price)
{
    std::vector<AggregatedQuoteType>::iterator i = v_BuyOrders.begin();
    for (; i != v_BuyOrders.end(); ++i)
    {
        if(i->get_price() >= price && another_function(i))
            break;
    }
    return i;
}
std::vector::iterator OrderBook::find_price(价格类型价格)
{
std::vector::iterator i=v_BuyOrders.begin();
对于(;i!=v_BuyOrders.end();++i)
{
如果(i->get_price()>=price&另一个_函数(i))
打破
}
返回i;
}

只需在if和break中执行第二次检查,并且只有在成功时才执行。哦,别忘了括号,它们使代码可读!)

std::vector::iterator OrderBook::find_price(价格类型价格)
{
std::vector::iterator i=v_BuyOrders.begin();
对于(;i!=v_BuyOrders.end();++i){
如果(i->get_price()>=价格和第二次检查(i->get_price())){
打破
}
}
}
返回i;
}

这样,它将执行您的搜索,对您的元素执行两项检查,并相应地中断。如果第二次检查没有成功,它将不会从循环中的位置中断continue。

将您对逻辑的设想转换为代码的最直接的方式是:

std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price)
{
    std::vector<AggregatedQuoteType>::iterator i = v_BuyOrders.begin();
    do
    {
        for (; i != v_BuyOrders.end(); ++i)
            if(i->get_price() >= price)        
                break;
        return i; // i.e. end()
    } while (!another_function(*i));
    return i;
}
std::vector::iterator OrderBook::find_price(价格类型价格)
{
std::vector::iterator i=v_BuyOrders.begin();
做
{
对于(;i!=v_BuyOrders.end();++i)
如果(i->get_price()>=价格)
打破
返回i;//即end()
}而(!另一个_函数(*i));
返回i;
}
它简化为:

std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price)
{
    std::vector<AggregatedQuoteType>::iterator i;
    for (i = v_BuyOrders.begin(); i != v_BuyOrders.end(); ++i)
        if(i->get_price() >= price && another_function(*i))
            break;
    return i;
}
std::vector::iterator OrderBook::find_price(价格类型价格)
{
std::vector::迭代器i;
对于(i=v_BuyOrders.begin();i!=v_BuyOrders.end();++i)
如果(i->get_price()>=price&另一个_函数(*i))
打破
返回i;
}
或者,如果您想使用标准算法实现更具声明性的方法:

#include <algorithm>
...

std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price)
{
    return std::find_if(v_BuyOrders.begin(), v_BuyOrders.end(), 
                        [](const AggregatedQuoteType& x)
                        { return x.get_price() >= price && another_function(x); });
}
#包括
...
标准::向量::迭代器订单簿::查找价格(价格类型价格)
{
return std::find_if(v_BuyOrders.begin(),v_BuyOrders.end(),
[](const AggregatedQuoteType&x)
{return x.get_price()>=price&另一个_函数(x);});
}

嗯,这可能是另一个没有初始值设定项部分的循环,因为您将使用保存的迭代器。如果(i->get\u price()>=price&&some\u other\u condition(i))中断,为什么不
?你能提个建议吗?你能试着用catch logic帮你解决这个问题吗?ie抛出错误并丢弃以捕获块,然后继续?@krowe您不认为在简单的条件检查可以执行时使用try/catch逻辑,并且当它与“异常”或“错误”无关时有点混乱吗?您的简化不会编译,因为在
中返回i
i
已经超出范围。太好了……这将只搜索v_BuyOrders的元素,不是吗?@RuthO'Brien是的-每个版本在指定的迭代器之间搜索-即
v_BuyOrders.begin()
v_BuyOrders.end()
std::find_if
也从返回第一个匹配项的
begin()
开始递增,或者如果没有匹配项,则从
.end()
开始递增。
#include <algorithm>
...

std::vector<AggregatedQuoteType>::iterator OrderBook::find_price(PriceType price)
{
    return std::find_if(v_BuyOrders.begin(), v_BuyOrders.end(), 
                        [](const AggregatedQuoteType& x)
                        { return x.get_price() >= price && another_function(x); });
}