C++ 如何从队列c++;

C++ 如何从队列c++;,c++,C++,如何在不使用for循环的情况下从队列中获取前五个元素?为什么要这样做?也许你必须一次掌握5个元素,原因在这里不清楚 无论如何-如果您是指STL: std::queue<Element> container; Element e1, e2, e3, e3, e5; e1 = container.front(); container.pop(); e2 = container.front(); container.pop(); e3 = container.front(); cont

如何在不使用
for
循环的情况下从队列中获取前五个元素?

为什么要这样做?也许你必须一次掌握5个元素,原因在这里不清楚

无论如何-如果您是指STL

std::queue<Element> container;

Element e1, e2, e3, e3, e5;

e1 = container.front();
container.pop();
e2 = container.front();
container.pop();
e3 = container.front();
container.pop();
e4 = container.front();
container.pop();
e5 = container.front();
container.pop();

你为什么要这么做?也许你必须一次掌握5个元素,原因在这里不清楚

无论如何-如果您是指STL

std::queue<Element> container;

Element e1, e2, e3, e3, e5;

e1 = container.front();
container.pop();
e2 = container.front();
container.pop();
e3 = container.front();
container.pop();
e4 = container.front();
container.pop();
e5 = container.front();
container.pop();
#包括
#包括
int main(){
std::队列q;
对于(int i=0;i>s;
q、 推;
}
int itemsToFetch=5;
做{
std::string curString=q.front();
q、 pop();
std::cout
#包括
#包括
int main(){
std::队列q;
对于(int i=0;i>s;
q、 推;
}
int itemsToFetch=5;
做{
std::string curString=q.front();
q、 pop();

std::cout根本没有显式循环:

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>

template <typename T>
class QueuePopper
{
public:
    QueuePopper(std::queue<T> &q) : q(q) {}
    T operator() (const T &) { T t = q.front(); q.pop(); return t; }
private:
    std::queue<T> &q;
};

int main()
{
    typedef std::string T;

    std::queue<T> q;

    ...

    std::vector<T> v(5);
    std::transform(v.begin(), v.end(), v.begin(), QueuePopper<T>(q));
}
#包括
#包括
#包括
#包括
模板
类排队器
{
公众:
QueuePopper(std::queue&q):q(q){}
T运算符()(常数T&){T T=q.front();q.pop();返回T;}
私人:
std::queue&q;
};
int main()
{
typedef std::字符串T;
std::队列q;
...
std::向量v(5);
std::transform(v.begin()、v.end()、v.begin()、QueuePopper(q));
}

完全没有显式循环:

#include <iostream>
#include <queue>
#include <vector>
#include <algorithm>

template <typename T>
class QueuePopper
{
public:
    QueuePopper(std::queue<T> &q) : q(q) {}
    T operator() (const T &) { T t = q.front(); q.pop(); return t; }
private:
    std::queue<T> &q;
};

int main()
{
    typedef std::string T;

    std::queue<T> q;

    ...

    std::vector<T> v(5);
    std::transform(v.begin(), v.end(), v.begin(), QueuePopper<T>(q));
}
#包括
#包括
#包括
#包括
模板
类排队器
{
公众:
QueuePopper(std::queue&q):q(q){}
T运算符()(常数T&){T T=q.front();q.pop();返回T;}
私人:
std::queue&q;
};
int main()
{
typedef std::字符串T;
std::队列q;
...
std::向量v(5);
std::transform(v.begin()、v.end()、v.begin()、QueuePopper(q));
}
还有一种方法:

template<int n> void GetElements(queue<string>& qu)
{
    if(!qu.empty())
    {
        cout << qu.front() << '\n';
        qu.pop();
    }
    GetElements<n-1>(qu);
}

template<> void GetElements<0>(queue<string>& qu) {}

// and call:
GetElements<5>(qu);
模板元素(队列和qu)
{
如果(!qu.empty())
{
cout还有一种方法:

template<int n> void GetElements(queue<string>& qu)
{
    if(!qu.empty())
    {
        cout << qu.front() << '\n';
        qu.pop();
    }
    GetElements<n-1>(qu);
}

template<> void GetElements<0>(queue<string>& qu) {}

// and call:
GetElements<5>(qu);
模板元素(队列和qu)
{
如果(!qu.empty())
{

不能使用while循环为什么不想在这里使用循环?当然是作业?还有什么会施加这样的限制…使用while循环为什么不想在这里使用循环?当然是作业?还有什么会施加这样的限制…该代码不起作用。声明
e1
作为引用意味着您需要立即初始化它。我想你会想抄袭的。在流行音乐之后你指的是什么?@stefaanv-同意,但q中的要求似乎是人为的…该代码不起作用。声明
e1
作为引用意味着您需要立即初始化它。我想您会想复制。在pop()之后您指的是什么?@stefaanv-同意,但q中的要求似乎是人为的……在这个解决方案中,隐藏的循环存在于
transform
中,那么循环的边界隐藏在哪里?我可以将带有循环的函数导出到其他文件,这是相同的。@Svisstack:当然。这是人为的场景!但我还没有实际编写一个循环。在这个解决方案中,是隐藏的循环存在于
变换中,那么循环的边界在哪里?我可以将带有循环的函数导出到其他文件,这是相同的。@Svisstack:当然。这是一个人工场景!但我不必实际编写循环。+1,因为每次看到它,我都会发现第二个构造是真的很聪明。+1,因为每次我看到它,我发现第二个构造真的很聪明。