std::string::rend
#include <string>
// Phiên bản non-const:
reverse_iterator rend() noexcept;
// Phiên bản const:
const_reverse_iterator rend() const noexcept;
Trả về một 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 rbegin()
, iterator sẽ dừng lại trước khi chạm đến vị trí rend()
.
Tham số
Không có tham số
Giá trị trả về
reverse_iterator
- Một reverse iterator trỏ đến vị trí "giả định" nằm trước phần tử đầu tiên của chuỗi (phiên bản non-const).
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 (phiên bản const).
Đặc điểm
- Iterator trả về bởi
rend()
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.rend()
là không hợp lệ và có thể dẫn đến lỗi). - Phạm vi
[rbegin, rend)
là "nửa mở", bao gồm phần tử rbegin nhưng không bao gồm phần tử rend. rend()
trả về reverse_iterator khi được gọi trên đối tượng std::string non-const, và trả về const_reverse_iterator khi được gọi trên đối tượng std::string const.- Cần phân biệt rõ reverse_iterator và const_reverse_iterator:
- reverse_iterator cho phép thay đổi giá trị của phần tử mà nó trỏ đến (nhưng không dùng rend để thay đổi).
- const_reverse_iterator không cho phép thay đổi giá trị.
rend()
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ừ
rbegin()
. - Kết hợp với
rbegin()
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 (ví dụ: std::for_each, std::transform, std::copy,...). - Kiểm tra xem 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 reverse_iterator, rbegin() và rend()
std::cout << "Chuỗi đảo ngược: ";
for (std::string::reverse_iterator rit = str.rbegin(); rit != str.rend(); ++rit) {
std::cout << *rit;
}
std::cout << std::endl;
// Sử dụng std::find_if ngược với rend()
auto it = std::find_if(str.rbegin(), str.rend(), [](char c){ return c == ','; });
if (it != str.rend()) {
std::cout << "Dấu phẩy được tìm thấy khi duyệt ngược tại vị trí: "
<< (str.rend() - it - 1) << std::endl; // Chú ý cách tính vị trí
}
return 0;
}
Các hàm liên quan
rbegin | Trả về một reverse iterator trỏ đến ký tự cuối cùng của chuỗi |
begin | Trả về một iterator trỏ đến ký tự đầu tiên của chuỗi std::string |
end | Trả về một iterator trỏ đến vị trí ngay sau ký tự cuối cùng của chuỗi std::string |