CodeNebula
C++11stlintermediate

std::queue (C++11 Evolution)

C++11 · Modern Revolution · Compiler flag: -std=c++11

Explanation

FIFO container adaptor, supports move semantics and `emplace`.

Real-World Scenario

Add print jobs to a printer queue efficiently.

Quick Snippet

snippet.cpp
#include <queue> std::queue<int> q; q.emplace(1);

Full Example

queue.cpp
// CodeNebula - C++11 Example: queue (C++11 Features)
// Compile: g++ -std=c++11 -Wall -Wextra -o example queue.cpp

// Demonstrates C++11-specific std::queue features: emplace (construct
// in-place at back), swap, and move semantics.

#include <iostream>
#include <queue>
#include <string>
#include <utility>

int main() {
    // emplace: construct element directly at the back
    std::cout << "=== emplace ===\n";
    std::queue<std::pair<std::string, int>> jobs;
    jobs.emplace("Print report", 1);
    jobs.emplace("Send email", 2);
    jobs.emplace("Backup data", 3);

    std::cout << "Front: (" << jobs.front().first << ", "
              << jobs.front().second << ")\n";
    std::cout << "Back:  (" << jobs.back().first << ", "
              << jobs.back().second << ")\n";
    std::cout << "Size:  " << jobs.size() << "\n\n";

    // Process all elements (FIFO order)
    std::cout << "=== Process all (FIFO) ===\n";
    while (!jobs.empty()) {
        auto& j = jobs.front();
        std::cout << "  (" << j.first << ", " << j.second << ")\n";
        jobs.pop();
    }
    std::cout << "\n";

    // swap: exchange contents of two queues
    std::cout << "=== swap ===\n";
    std::queue<int> q1, q2;
    q1.push(10); q1.push(20); q1.push(30);
    q2.push(100); q2.push(200);

    std::cout << "Before: q1.front=" << q1.front()
              << " q2.front=" << q2.front() << "\n";
    q1.swap(q2);
    std::cout << "After:  q1.front=" << q1.front()
              << " q2.front=" << q2.front() << "\n";
    std::cout << "q1.size=" << q1.size()
              << " q2.size=" << q2.size() << "\n\n";

    // Move semantics
    std::cout << "=== Move semantics ===\n";
    std::queue<int> src;
    src.push(1); src.push(2); src.push(3);
    std::cout << "src size before: " << src.size() << "\n";
    std::queue<int> dst = std::move(src);
    std::cout << "dst size after:  " << dst.size() << "\n";
    std::cout << "dst front:       " << dst.front() << "\n";
    std::cout << "src size after:  " << src.size() << "\n";

    return 0;
}

// Expected output:
// === emplace ===
// Front: (Print report, 1)
// Back:  (Backup data, 3)
// Size:  3
//
// === Process all (FIFO) ===
//   (Print report, 1)
//   (Send email, 2)
//   (Backup data, 3)
//
// === swap ===
// Before: q1.front=10 q2.front=100
// After:  q1.front=100 q2.front=10
// q1.size=2 q2.size=3
//
// === Move semantics ===
// src size before: 3
// dst size after:  3
// dst front:       1
// src size after:  0
Run command
g++ -std=c++11 -Wall -Wextra -o example queue.cpp