在C ++中使用嵌套的for循环需要帮助

时间:2019-10-10 21:24:06

标签: c++ loops for-loop nested

我正在研究双重拍卖人模拟器,因此我需要一种检查买入和卖出出价的方法,以查看买入价格是否小于卖出价格。 有10个买入买入价存储在对象向量中,还有10个卖出买入价。

下面我附上了我的方法代码。我知道我可以有多个循环来检查一个买入价到所有卖出价。

void match()
{
    for (int i=0;i<buyBid.size();i++)
    { 
        if (buyBid[0].price <= sellBid[i].price)
        {
            matchedBids.push_back(buyBid[0]);
            matchedBids.push_back(sellBid[i]);
            clearingPrice = (buyBid[0].price+sellBid[i].price)/2;
            cout <<clearingPrice<<endl;
        }   
        else
        {
            unmatchedBuyBids.push_back(buyBid[0]);
            unmatchedSellBids.push_back(sellBid[i]);
        }
    }       
}   

我想知道是否可以使用嵌套的for循环以及如何使用,要检查所有卖出价的每个买入报价,而不是检查buybid [0]价格是否低于

2 个答案:

答案 0 :(得分:0)

这里缺少一些细节。满足条件后,任何买入价都能与买入价相对应吗?您可以使用两个嵌套循环来检查一个价格与另一个价格,并跳过已经匹配(或等价)的价格索引。但是,这并不是N * M(二次时间)最有效的方法。

您可以对价格进行排序,并逐步遍历各个向量,一路匹配价格。排序的复杂度为Nlogn,但每个向量仅遍历一次。

答案 1 :(得分:-1)

for(int i = 0; i < sellBid.size(); ++i)
{
    for(int j = 0; j < buyBid.size(); ++j)
    {
        if (buyBid[j].price <= sellBid[i].price)
        {
            matchedBids.push_back(buyBid[j]);
            matchedBids.push_back(sellBid[i]);
            clearingPrice = (buyBid[j].price + sellBid[i].price) / 2;
            cout << clearingPrice << endl;
        }   
        else
        {
            unmatchedBuyBids.push_back(buyBid[j]);
            unmatchedSellBids.push_back(sellBid[i]);
        }
    }
}

如果它只是嵌套的for循环,您会遇到麻烦,那么这应该会有所帮助。我假设这两个数组是在函数上方的某个地方初始化的(尽管它们确实应该作为参数传递给函数本身)