Vector และการเข้าถึงสมาชิกสุดท้าย
std::vector เป็น dynamic array เก็บข้อมูลในหน่วยความจำติดกัน (contiguous) รองรับ random access O(1)
วิธีเข้าถึงสมาชิกตัวสุดท้ายมี 2 วิธีหลัก:
วิธีที่ 1: back() (แนะนำ)
#include <bits/stdc++.h>
using namespace std;
int main() {
vector<int> vec = {11, 22, 33, 44, 55};
cout << "Before: ";
for (int x : vec) cout << x << " ";
cout << "\nLast element (back()): " << vec.back(); // 55
// อัปเดตค่า
vec.back() = 66;
cout << "\nAfter: ";
for (int x : vec) cout << x << " ";
// 11 22 33 44 66
return 0;
}
Output
Before: 11 22 33 44 55 Last element (back()): 55 After: 11 22 33 44 66
วิธีที่ 2: size() + operator[]
int last_idx = vec.size() - 1;
cout << vec[last_idx]; // 55
vec[last_idx] = 66; // update
Output
Last element (size-1): 55 After: 11 22 33 44 66
เปรียบเทียบ
| วิธี | ความปลอดภัย | ความหมาย | Performance |
|---|---|---|---|
back() | UB ถ้า empty | Semantic ชัดเจน "ตัวสุดท้าย" | O(1) |
vec[size()-1] | UB ถ้า empty | Index-based | O(1) |
vec.at(size()-1) | Throw out_of_range | Bounds checked | O(1) + check |
Best Practice
- ใช้
back()สำหรับความหมายชัดเจน (self-documenting) - **เช็ค empty() ก่อนเสมอ** ถ้าไม่มั่นใจ
- C++23:
vec.back()มี overload ที่รับ default value สำหรับ empty vector
// Safe pattern
if (!vec.empty()) {
cout << vec.back();
vec.back() = new_value;
}
ฟังก์ชันคู่คือ front()
front()- สมาชิกตัวแรก (index 0)back()- สมาชิกตัวสุดท้าย (index size()-1)
สรุป
ใช้ vec.back() เพื่ออ่าน/เขียนสมาชิกตัวสุดท้ายของ vector อย่าลืมเช็ค empty() ก่อนใช้งาน