std::string::crend
#include <string>
const_reverse_iterator crend() const noexcept;
Trả 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. Khi duyệt ngược lại từ cuối chuỗi sử dụng crbegin()
, iterator sẽ dừng lại trước khi chạm đến vị trí crend()
. 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.
Tham số
Không có tham số
Giá trị trả về
const_reverse_iterator
- 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.
Đặc điểm
crend()
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ừcrend()
.- Iterator trả về bởi
crend()
không trỏ đến ký tự hợp lệ trong chuỗi. Nó chỉ đánh dấu vị trí "trước phần tử đầu tiên". Do đó, bạn không được phép giải tham chiếu (dereference) iterator này (*str.crend()
là không hợp lệ và có thể dẫn đến lỗi). - 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. crend()
luôn trả về const_reverse_iterator, kể cả khi đối tượng std::string là non-const.- 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.
crend()
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.crend()
thường được sử dụng để:- Xác định điểm kết thúc khi duyệt chuỗi theo thứ tự ngược lại, bắt đầu từ
crbegin()
. - Kết hợp với
crbegin()
và 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 (nhưng chỉ với các thuật toán không làm thay đổi nội dung chuỗi, ví dụ: std::for_each, std::find_if,...). - Kiểm tra xem const reverse iterator đã đi đến điểm "trước" đầu chuỗi hay chưa.
- Xác định điểm kết thúc khi duyệt chuỗi theo thứ tự ngược lại, bắt đầu từ
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, crbegin() và crend()
std::cout << "Chuỗi ngược (sử dụng crbegin và crend): ";
for (auto it = str.crbegin(); it != str.crend(); ++it) {
std::cout << *it;
}
std::cout << std::endl;
// Sử dụng std::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; // Chú ý cách tính vị trí
}
return 0;
}
Các hàm liên quan
begin | Trả về một iterator trỏ đến ký tự đầu tiên của chuỗi std::string |
crend | Trả 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 |
rbegin | Trả về một reverse iterator trỏ đến ký tự cuối cùng của chuỗi |