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

match_results::cbegin() và cend() trong C++ STL

std::match_results::cbegin() và cend() (header <regex>) trả về const_iterator để duyệt chỉ đọc (read-only) qua các sub-match.

Cú pháp

const_iterator cbegin() const noexcept;
const_iterator cend() const noexcept;

Đặc điểm

  • cbegin(): Trỏ đến sub-match đầu tiên (group 0).
  • cend(): Trỏ đến vị trí sau sub-match cuối cùng (past-the-end).
  • Const iterator: Không cho phép sửa đổi sub-match qua iterator.
  • Tương đương begin()/end() nhưng cho const object hoặc read-only access.

Ví dụ 1: Duyệt const match_results

#include <iostream>
#include <string>
#include <regex>

int main() {
    std::string str("Tutorials");
    std::smatch Mat;
    std::regex re("(Tuto)(.*)");
    std::regex_match(str, Mat, re);
    
    std::cout << "Match Found:\n";
    for (std::smatch::const_iterator it = Mat.cbegin(); it != Mat.cend(); ++it) {
        std::cout << *it << '\n';
    }
    return 0;
}

Đầu ra

Match Found:
Tutorials
Tuto
rials

Ví dụ 2: Duyệt với range-based for (C++11)

#include <bits/stdc++.h>
using namespace std;

void print_matches(const smatch& m) {
    // Tự động dùng cbegin/cend vì m là const reference
    for (const auto& sub : m) {
        cout << "Sub-match: '" << sub << "', length: " << sub.length() << '\n';
    }
}

int main() {
    string s = "Hello World";
    regex r("(\\w+)\\s+(\\w+)");
    smatch m;
    regex_match(s, m, r);
    
    print_matches(m);
    return 0;
}

Đầu ra

Sub-match: 'Hello World', length: 11
Sub-match: 'Hello', length: 5
Sub-match: 'World', length: 5

So sánh các iterator

HàmTrả vềDùng khi
begin()iteratorCần sửa đổi sub_match (hiếm)
end()iteratorSentinel non-const
cbegin()const_iteratorDuyệt read-only, const object
cend()const_iteratorSentinel const

Lưu ý

  • match_results model Container (read-only), hỗ trợ range-based for.
  • Iterator là BidirectionalIterator (hỗ trợ ++, --).
  • Dereference iterator trả về const sub_match<BidirectionalIterator>&.
  • Không có rbegin()/rend() cho match_results (C++11-20).