Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

vector::begin() và vector::end() trong C++ STL

vector::begin() và vector::end() là hai hàm thành viên trả về bidirectional iterator (lặp tiến/lùi), dùng để duyệt vector theo chuẩn STL.

Đặc điểm

  • begin(): trỏ đến phần tử đầu tiên.
  • end(): trỏ đến vị trí sau phần tử cuối (past-the-end) – không phải phần tử cuối.
  • Cặp [begin(), end()) đại diện cho toàn bộ phạm vi (half-open range).
  • Có phiên bản const: cbegin(), cend() (C++11).
  • Có phiên bản reverse: rbegin(), rend().

Ví dụ cơ bản

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

int main() {
    vector<int> v = {50, 60, 70, 80, 90};

    // Chèn ở đầu bằng insert + begin()
    v.insert(v.begin(), 40);        // {40, 50, 60, 70, 80, 90}
    v.insert(v.begin(), 1, 30);     // {30, 40, 50, 60, 70, 80, 90}

    // Duyệt dùng begin/end
    cout << "Vector elements: ";
    for (auto it = v.begin(); it != v.end(); ++it)
        cout << *it << ' ';
    cout << endl;

    // Copy sang vector khác dùng range constructor
    vector<int> v2(v.begin(), v.end());
    cout << "Copied vector: ";
    for (auto it = v2.begin(); it != v2.end(); ++it)
        cout << *it << ' ';
    cout << endl;

    return 0;
}

Kết quả

Vector elements: 30 40 50 60 70 80 90
Copied vector: 30 40 50 60 70 80 90

Các mẫu dùng phổ biến

Mục đíchCode
Duyệt đọcfor (auto it = v.cbegin(); it != v.cend(); ++it)
Duyệt ghifor (auto it = v.begin(); it != v.end(); ++it) *it *= 2;
Range-based for (C++11)for (auto& x : v) ... (tự dùng begin/end)
Thuật toán STLsort(v.begin(), v.end()); find(v.begin(), v.end(), val);
Chèn/xóav.insert(v.begin()+2, 99); v.erase(v.begin());
Duyệt ngượcfor (auto it = v.rbegin(); it != v.rend(); ++it)

Lưu ý quan trọng

  • Iterator invalidation: push_back, insert, erase, resize có thể làm iterator cũ thành invalid. Không lưu iterator lâu dài qua các thao tác sửa đổi.
  • end() không thể dereference (*end() = UB).
  • Vector rỗng: begin() == end().