Я пытаюсь сделать это, чтобы вставить Продукт в вектор очередей, но он заполняется только один за другим, пока не будет заполнен набор продуктов.
Как я могу сделать метод вставки баланса продуктов в хранилище и не заполнять один за другим до максимальной емкости?
Вектор очередей:
vector < queue <Product*> > depFresh;
Существует наследие между моим классом депозита и классом DepositFresh. Мой DepositFresh унаследовал все поля, объявленные в моем классе "Депозит". В своем классе "Депозит" я заявил:
Class Deposit {
private:
int number_Palets_Storage;
int max_Capacity_Palet;
int total_Area_Deposit;
public:
virtual void insertProduct(const Produto *produto) =0;
}
Мой класс DepositFresh содержит следующий метод:
Вставка метода:
void DepositFresh::insertProduct(const Product *product) {
if (depFresh.size() == getNumber_Palets_Storage())
for (int i = 0; i < depFresh.size(); i++) {
if (depFresh.at(i).size() < getMax_Capacity__Palet())
depFresh.at(i).push(product->clone());
break;
}
}
Если я понимаю вашу проблему, вы хотите вставить продукт в очередь с наименьшей мощностью в своем векторе. Почему бы не искать наименьший размер и нажать соответственно?
#include <vector>
#include <queue>
#include <iostream>
#include <string>
#include <algorithm>
class myContainer
{
private:
std::vector< std::queue< long > > depFresh;
public:
myContainer( size_t queue_cnt ) : depFresh( queue_cnt )
{
}
void insertProduct( long product )
{
auto iter = std::min_element( depFresh.begin(), depFresh.end(), []( std::queue< long > & l, std::queue< long > & r ){ return l.size() < r.size(); } );
iter->push( product );
}
void dump()
{
size_t index = 0;
std::cout << "---------------------------" << std::endl;
for( const auto & o : depFresh )
{
std::cout << ++index << " has size " << o.size() << '\n';
}
std::cout << "---------------------------" << std::endl;
}
};
int main()
{
myContainer container( 5 );
for( long x = 0; x < 40; ++x )
{
container.insertProduct( x );
container.dump();
}
}
Это дает:
---------------------------
1 has size 1
2 has size 0
3 has size 0
4 has size 0
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 0
4 has size 0
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 1
4 has size 0
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 1
4 has size 1
5 has size 0
---------------------------
---------------------------
1 has size 1
2 has size 1
3 has size 1
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 1
3 has size 1
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 1
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 2
4 has size 1
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 2
4 has size 2
5 has size 1
---------------------------
---------------------------
1 has size 2
2 has size 2
3 has size 2
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 2
3 has size 2
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 2
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 3
4 has size 2
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 3
4 has size 3
5 has size 2
---------------------------
---------------------------
1 has size 3
2 has size 3
3 has size 3
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 3
3 has size 3
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 3
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 4
4 has size 3
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 4
4 has size 4
5 has size 3
---------------------------
---------------------------
1 has size 4
2 has size 4
3 has size 4
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 4
3 has size 4
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 4
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 5
4 has size 4
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 5
4 has size 5
5 has size 4
---------------------------
---------------------------
1 has size 5
2 has size 5
3 has size 5
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 5
3 has size 5
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 5
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 6
4 has size 5
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 6
4 has size 6
5 has size 5
---------------------------
---------------------------
1 has size 6
2 has size 6
3 has size 6
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 6
3 has size 6
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 6
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 7
4 has size 6
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 7
4 has size 7
5 has size 6
---------------------------
---------------------------
1 has size 7
2 has size 7
3 has size 7
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 7
3 has size 7
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 7
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 8
4 has size 7
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 8
4 has size 8
5 has size 7
---------------------------
---------------------------
1 has size 8
2 has size 8
3 has size 8
4 has size 8
5 has size 8
---------------------------
</pre>
Имо проще всего хранить новые объекты в круговом режиме. Для этого вы можете сохранить индекс, который запоминает, где вы что-то сохраняли. Как только вы храните что-то в очереди, вы можете сделать что-то вроде
insertion_index = (insertion_index + 1) % v.size();
При следующем вызове следующая очередь будет хранить следующий продукт.
Это самая простая стратегия балансировки, о которой можно подумать, но также можно использовать приоритетную очередь вместо вектора, чтобы всегда вставлять в очередь с наименьшими элементами, используя размер очереди как приоритет (low = высокий приоритет).
Вы пытаетесь вставить Продукт во все очереди, пока они не будут заполнены? звучит как
int i = 0;
while(true)
{
if (depFresh.at(i).size() < getMax_Capacity__Palet())
depFresh.at(i).push(product->clone());
else
break;
i = (i + 1) / depFresh.size();
}
Но почему нет
for(int i = 0; i < depFresh.size(); ++i)
for (int j = 0; j < getMax_Capacity__Palet() ; ++j)
depFresh.at(i).push(product->clone());
i
для итерации в одном из циклов.