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