繁体   English   中英

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

[英]need help using nested for loops in c++

我正在研究双重拍卖模拟器,我需要一种检查买卖出价的方法,以查看买入价是否<卖出价。 有 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] 价格是否为 < sellbid[i] 价格,然后检查是否 buybid[1] <sellbid[i] 等等。

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

您可以对价格进行排序并逐步遍历各个向量,并在此过程中匹配价格。 你的复杂度是 Nlogn 的排序,但你只遍历每个向量一次。

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 循环,那么这应该会有所帮助。 我假设两个 arrays 在 function 上方的某个地方初始化(尽管它们确实应该作为参数传递给 function 本身)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM