所以我目前正在尝试更多地了解STL算法,并尝试在线搜索是否可以使用STL算法创建嵌套for循环,但是还没有得到我想要的答案。基本上,在OrderManager中,我有一个CustomerOrders类的向量,它包含一个订单数组。在ItemManager内部,它有一个当前可用的类Items的向量。我在下面的代码中尝试实现的是输出客户请求“不可用”的任何项目。正如您所看到的,我已经创建了一个嵌套的for循环,但最终,如果可能的话,我想通过STL算法实现这一点。
如果有什么事情有点混乱,或者我以某种方式错误地格式化了这个帖子,请告诉我。
void OrderManager::validate(const ItemManager& itemManager, std::ostream& os)
{
for (int i = 0; i < std::vector<CustomerOrder>::size(); i++)
{
for (int j = 0; j < std::vector<CustomerOrder>::at(i).noOrders(); j++)
{
for (int k = 0; k < itemManager.size(); i++)
{
if (std::vector<CustomerOrder>::at(i)[j] == itemManager.at(k).getName())
{
break;
}
if (k == itemManager.size() - 1)
{
os << std::vector<CustomerOrder>::at(i)[j] << " is unavailable." << std::endl;
}
}
}
}
}
它可以用std :: for_each和lambdas来完成,但这对于这个操作来说似乎有些愚蠢,
std::for_each(orders.cbegin(), orders.cend(), [&ostrm] (CustomerOrder const & order) {
std::vector<Item> const & noOrders = order.NoOrders();
std::for_each(noOrders.cbegin(), noOrders.cend(), [&ostrm] (Item const & item) { ostrm << item; });
});