Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

deque::at() และ deque::swap() ใน C++ STL

deque::at() และ deque::swap() ใน C++ STL

Deque (Double-ended Queue) คืออะไร?

Deque คือ sequence container ที่ขยาย/หดได้ที่ทั้งสองข้าง คล้าย vector แต่ไม่รับประกัน contiguous storage เหมาะสำหรับ insertion/deletion ที่ทั้งสองข้าง

deque::at()

เข้าถึงองค์ประกอบที่ตำแหน่งกำหนด พร้อม bounds checking (โยน std::out_of_range ถ้าถูกต้อง)

Syntax

dequename.at(position)

พารามิเตอร์

ตำแหน่งขององค์ประกอบ (0-based index)

คืนค่า

Reference ไปยังองค์ประกอบที่ตำแหน่งนั้น

ตัวอย่าง

#include <deque>
#include <iostream>
using namespace std;

int main() {
    deque<int> adeque;
    adeque.push_back(1);
    adeque.push_back(3);
    adeque.push_back(4);
    adeque.push_back(5);
    adeque.push_back(8);
    cout << adeque.at(3);  // พิมพ์ 5
    return 0;
}

Output: 5

deque::swap()

สลับเนื้อหาของ deque สองตัวที่มี type และ size เท่ากัน

Syntax

deque1.swap(deque2)

พารามิเตอร์

deque อีกตัวที่ต้องการสลับ

คืนค่า

void (สลับแบบ in-place)

ตัวอย่าง

#include <deque>
#include <iostream>
using namespace std;

int main() {
    deque<int> adeque{ 1, 2, 3, 4 };
    deque<int> bdeque{ 3, 5, 7, 9 };
    
    adeque.swap(bdeque);
    
    cout << "adeque = ";
    for (auto it = adeque.begin(); it != adeque.end(); ++it)
        cout << *it << " ";
    cout << endl << "bdeque = ";
    for (auto it = bdeque.begin(); it != bdeque.end(); ++it)
        cout << *it << " ";
    return 0;
}

ผลลัพธ์

adeque = 3 5 7 9
bdeque = 1 2 3 4

ข้อสังเกต

  • swap เป็น O(1) แค่สลับ internal pointers (ไม่ copy ข้อมูล)
  • มี std::swap(deque1, deque2) ให้ใช้แบบ non-member ได้เช่นกัน
  • at() ช้ากว่า operator[] เล็กน้อย เพราะทำ bounds checking