首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ 佇列操作:從四個佇列中高效選出最短佇列

     編輯:程式設計疑難解答

需求分析

給定 4 個佇列物件,需找出當前元素最少者,並對該佇列進行後續操作(如入隊)。關鍵在於**不複製佇列**,而是取得**參考或指標**以操作原物件。

陷阱:傳值導致複製

原回答回傳 BankQueue 物件會觸發複製建構,後續操作的是副本而非原佇列。

正確設計:回傳參考/指標

// 假設佇列型別為 std::queue<Customer> 或自訂類別
using QueueRef = std::queue<Customer>&; // 或 BankQueue&

QueueRef findShortest(std::array<QueueRef, 4> queues) {
    auto shortest = queues[0];
    for (size_t i = 1; i < queues.size(); ++i) {
        if (queues[i].size() < shortest.size()) {
            shortest = queues[i];
        }
    }
    return shortest; // 回傳參考,綁定原物件
}

// 使用
auto& q = findShortest(myQueues);
q.push(newCustomer); // 直接操作原佇列

若使用陣列指標

BankQueue* findShortest(BankQueue* qs[4]) {
    BankQueue* minQ = qs[0];
    for (int i = 1; i < 4; ++i) {
        if (qs[i]->size() < minQ->size()) minQ = qs[i];
    }
    return minQ; // 回傳指標
}

效能補充

  • size() 通常為 O(1),無需手動計算 rear - front(僅適用環狀陣列實作)。
  • 若佇列操作極頻繁,考慮維護一個「最短佇列索引」快取,僅在入隊/出隊時更新,達到 O(1) 選擇。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved