std::string::end
#include <string>
// Phiên bản non-const:
iterator end() noexcept;
// Phiên bản const:
const_iterator end() const noexcept;
Trả về một iterator trỏ đến vị trí ngay sau ký tự cuối cùng của chuỗi std::string. Iterator này đóng vai trò là "past-the-end" iterator, đánh dấu điểm kết thúc của chuỗi và không trỏ đến bất kỳ ký tự hợp lệ nào trong chuỗi.
Tham số
Không có tham số
Giá trị trả về
iterator
- Một iterator trỏ đến vị trí ngay sau ký tự cuối cùng của chuỗi (phiên bản non-const).
const_iterator
- Một const iterator trỏ đến vị trí ngay sau ký tự cuối cùng của chuỗi (phiên bản const).
Đặc điểm
- Iterator trả về bởi
end()
không trỏ đến ký tự hợp lệ trong chuỗi. Nó chỉ đánh dấu vị trí "past-the-end". Do đó, bạn không được phép giải tham chiếu (dereference) iterator này (*str.end()
là không hợp lệ và có thể dẫn đến lỗi). - Phạm vi
[begin, end)
là "nửa mở", bao gồm phần tử begin nhưng không bao gồm phần tử end. end()
trả về iterator khi được gọi trên đối tượng std::string non-const, và trả về const_iterator khi được gọi trên đối tượng std::string const.- iterator cho phép thay đổi giá trị của phần tử mà nó trỏ đến (nhưng không phải là
end()
), trong khi const_iterator thì không. end()
thường được sử dụng để:- Xác định điểm kết thúc của một phạm vi (range) đại diện cho toàn bộ chuỗi, khi duyệt qua chuỗi bằng iterator.
- Kết hợp với các thuật toán trong thư viện
<algorithm>
để thao tác với chuỗi (ví dụ: std::for_each, std::transform, std::copy, std::find,...). - Kiểm tra xem iterator đã đi đến cuối chuỗi hay chưa.
Ví dụ
#include <iostream>
#include <string>
#include <algorithm>
int main() {
std::string str = "Hello, world!";
// Duyệt qua chuỗi sử dụng iterator và end()
std::cout << "Chuỗi: ";
for (std::string::iterator it = str.begin(); it != str.end(); ++it) {
std::cout << *it;
}
std::cout << std::endl;
// Sử dụng std::find với end()
std::string::iterator it = std::find(str.begin(), str.end(), ',');
if (it != str.end()) {
std::cout << "Dấu phẩy được tìm thấy tại vị trí: " << (it - str.begin()) << std::endl;
}
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 |
rbegin | Trả về một reverse iterator trỏ đến ký tự cuối cùng của chuỗi |
rend | 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 |