Chuyển tới nội dung chính

std::string::crbegin

#include <string>

const_reverse_iterator crbegin() const noexcept;

Trả về một const reverse iterator trỏ đến ký tự cuối cùng của chuỗi. const_reverse_iterator cho phép đọc giá trị của ký tự nhưng không cho phép thay đổi nội dung của chuỗi thông qua iterator này. Hơn nữa, nó sẽ duyệt chuỗi theo chiều ngược lại (từ cuối về đầu).

Tham số

Không có tham số

Giá trị trả về

const_reverse_iterator

  • Một const reverse iterator trỏ đến ký tự cuối cùng của chuỗi.

Đặc điểm

  1. crbegin() luôn trả về const_reverse_iterator bất kể đối tượng std::string được gọi là const hay non-const. Điều này đảm bảo rằng bạn không thể vô tình thay đổi nội dung chuỗi thông qua iterator trả về từ crbegin().
  2. Phạm vi [crbegin, crend) là "nửa mở", bao gồm phần tử crbegin nhưng không bao gồm phần tử crend.
  3. crbegin() luôn trả về const_reverse_iterator, kể cả khi đối tượng std::string là non-const.
  4. const_reverse_iterator chỉ cho phép đọc, không cho phép thay đổi giá trị của phần tử mà nó trỏ đến.
  5. crbegin() là một hàm thành viên của std::string (và std::basic_string) được thêm vào từ C++11, để hỗ trợ tốt hơn cho việc lập trình với các đối tượng const và cung cấp quyền truy cập chỉ đọc (theo chiều ngược) vào chuỗi.
  6. crbegin() thường được sử dụng để:
    • Duyệt qua các ký tự của chuỗi theo thứ tự ngược lại, từ cuối về đầu, mà không làm thay đổi nội dung chuỗi.
    • Kết hợp với các thuật toán trong thư viện <algorithm> để thao tác với chuỗi theo thứ tự ngược lại (ví dụ: std::for_each, std::transform, std::copy - nhưng chỉ với các thuật toán không làm thay đổi nội dung chuỗi).
    • Cung cấp quyền truy cập chỉ đọc vào chuỗi theo chiều ngược lại cho các hàm hoặc đối tượng khác.

Ví dụ

#include <iostream>
#include <string>
#include <algorithm>

int main() {
std::string str = "Hello, world!";

// Duyệt ngược chuỗi sử dụng const_reverse_iterator và crbegin()
std::cout << "Chuỗi ngược (sử dụng crbegin): ";
for (auto it = str.crbegin(); it != str.crend(); ++it) {
std::cout << *it;
}
std::cout << std::endl;

// Ví dụ sử dụng find_if ngược với crbegin() và crend()
auto it = std::find_if(str.crbegin(), str.crend(), [](char c){ return c == ','; });
if (it != str.crend()) {
std::cout << "Dấu phẩy được tìm thấy khi duyệt ngược tại vị trí: "
<< (str.crend() - it - 1) << std::endl;
}

return 0;
}

Các hàm liên quan

beginTrả về một iterator trỏ đến ký tự đầu tiên của chuỗi std::string
crendTrả về một const reverse iterator trỏ đến vị trí "giả định" nằm trước phần tử đầu tiên của chuỗi
rbeginTrả về một reverse iterator trỏ đến ký tự cuối cùng của chuỗi