相关疑难解决方法(0)

如何有效清除std :: queue?

我正在使用std :: queue来实现JobQueue类.(基本上这个类以FIFO方式处理每个作业).在一种情况下,我想一次性清除队列(从队列中删除所有作业).我没有看到std :: queue类中有任何明确的方法.

如何有效地为JobQueue类实现clear方法?

我有一个简单的循环弹出解决方案,但我正在寻找更好的方法.

//Clears the job queue
void JobQueue ::clearJobs()
 {
  // I want to avoid pop in a loop
    while (!m_Queue.empty())
    {
        m_Queue.pop();
    }
}
Run Code Online (Sandbox Code Playgroud)

c++ queue stl

159
推荐指数
6
解决办法
13万
查看次数

.*&运营商做什么?

我偶然发现了这个问题,其答案使用了一个奇怪的结构:

typedef std::queue<int> Q;
typedef Q::container_type C;

C & get (Q &q)
{
    struct hack : private Q {
        static C & get (Q &q) {
            return q.*&hack::c;
        }
    };
    return hack::get(q);
}
Run Code Online (Sandbox Code Playgroud)

我通常遵循它q可以访问cget函数引用的自己的成员.但是,我无法清楚地解释它.究竟发生了什么.*&,为什么允许?

c++ stl c++11

31
推荐指数
2
解决办法
1268
查看次数

14
推荐指数
3
解决办法
6万
查看次数

我无法理解这一行 - 解除引用私有成员变量的地址或者什么?

我刚问了一个关于访问STL适配器的底层容器的问题.我得到了一个非常有用的答案:

template <class T, class S, class C>
    S& Container(priority_queue<T, S, C>& q) {
        struct HackedQueue : private priority_queue<T, S, C> {
            static S& Container(priority_queue<T, S, C>& q) {
                return q.*&HackedQueue::c;
            }
        };
    return HackedQueue::Container(q);
}

int main()
{
    priority_queue<SomeClass> pq;
    vector<SomeClass> &tasks = Container(pq);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,我无法理解这一行:

return q.*&HackedQueue::c;
Run Code Online (Sandbox Code Playgroud)

这条线做什么?此外,该行怎么可以访问私有容器priority_queue传递给函数Container

c++ stl

7
推荐指数
1
解决办法
494
查看次数

通过其值获取std :: queue中元素的索引

是否有一种简单的方法可以std::queue在C++中通过其值获取元素的位置?

例如:

std::queue<int> numbers;

numbers.push(7);
numners.push(4);
numbers.push(11);

int position = numbers.getPosition(4); //should be 1
Run Code Online (Sandbox Code Playgroud)

c++ queue stl

7
推荐指数
2
解决办法
749
查看次数

使用作用域限定的queue :: swap清空std :: queue是否违反任何规则?

我在许多情况下都在使用队列,队列可能增长到数百个。不幸的是,如果有必要的话,没有一种解决队列清空的方法。我想知道是否使用作用域队列进行交换,然后销毁作用域队列,是否破坏了任何内存分配/管理规则?

以下代码段是我建议的示例。如果长时间使用,似乎工作正常,不确定结果。

#include <cstdlib>
#include <iostream>
#include <queue>
int
main()
{
    std::queue<int> foo;
    foo.push(10);
    foo.push(20);
    foo.push(30);
    std::cout << "size of before foo: " << foo.size() << '\n';

    {
        std::queue<int> bar;
        swap(foo, bar);
    }
    std::cout << "size of after foo: " << foo.size() << '\n';
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ queue scope

6
推荐指数
2
解决办法
113
查看次数

如何合并两个priority_queue?

我有两个priority_queuefloat这样的:

std::priority_queue<float> queue1;
std::priority_queue<float> queue2;
Run Code Online (Sandbox Code Playgroud)

我需要合并它们。但是 STLmerge算法不允许priority_queue直接使用:

merge(
  queue1.begin(), queue2.end(),
  queue2.begin(), queue2.end(),
  queue1
);
Run Code Online (Sandbox Code Playgroud)

priority_queue没有不使用辅助数据结构的方式进行合并?

c++ c++11

3
推荐指数
2
解决办法
3932
查看次数

标签 统计

c++ ×7

stl ×4

queue ×3

c++11 ×2

scope ×1