我有一个范例,在向量队列的循环中,如果第i个队列的条件为真,则将第i个队列的队列化增加5。在此操作之后,我需要搜索所有队列的队列大小并在最短队列中排队。 我想做类似下面给出的代码
#include <vector>
#include <queue>
int min_index = 0;
std::vector<std::queue<int> > q
std::size_t size = q.size();
for( i=0; i<size; i++){
if(..) {// A condition is true
//increase the size of the ith queue by 5 more times
}
if(q[min_index].size() > q[i].size())
min_index = i; // Now q[min_index] is the shortest queue
}
q[min_index].push(int)
}
如果条件为真,如何以人为方式增加队列大小?然后搜索队列并找到最短的队列。
已更新
#include <vector>
#include <deque>
int min_index = 0;
std::vector<std::deque<int> > q
std::size_t size = q.size();
for( i=0; i<size; i++){
if(...) {// A condition is true
q[i].resize(q[i].size() + 5)
}
if(q[min_index].size() > q[i].size())
min_index = i; // Now q[min_index] is the shortest queue
}
q[min_index].push(int)
}
答案 0 :(得分:3)
“增加队列大小”并不清楚你的意思。
如果您的意思是“增加队列容量”,则不需要。队列的默认底层容器是deque,它不是内存中的连续块,因此不会遇到任何扩展问题,因此无需提前reserve()
。有关详细信息,请参阅here。
因此,队列的大小就是其中的项目数。如果你想增加那个,deque有一个resize()
函数,它可以将所有新项目的指定值作为参数,或者只是对它们进行值初始化。
答案 1 :(得分:1)
这是一种可行的方法(假设C ++ 11是一个选项,否则该示例很容易在没有lambdas和auto
的情况下重写):
#include <vector>
#include <queue>
#include <algorithm>
// Don't use this in your real code: I use it here just for convenience.
// It is a bad programming practice to import a whole namespace (especially
// if it is a Standard Library namespace).
using namespace std;
// The function that defines your condition on each queue
bool cond_on_q(queue<int> const& q)
{
bool satisfied = false;
// Determine whether the condition is satisfied...
return satisfied;
}
int main()
{
vector<queue<int>> v = ...; // Initialize your vector of queues somehow
// Iterate over the vector of queues
for (auto& q : v)
{
if (cond_on_q(q)) // Is the condition satisfied?
{
// Insert 5 elements with any valid value (for instance, 0)
for (int i = 0; i < 5; i++) (q.push(0));
}
}
// Determine the queue with the minimum size.
auto i = min_element(begin(v), end(v),
[] (queue<int> const& q1, queue<int> const& q2) {
return q1.size() < q2.size();
}
);
int newValue = ...; // Initialize the value to be enqueued somehow.
// Add the value to the queue with minimum size.
i->push(newValue);
}