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

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

  1. 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).
  2. 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.
  3. 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.
  4. 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.
  5. 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

beginTrả về một iterator trỏ đến ký tự đầu tiên của chuỗi std::string
rbeginTrả về một reverse iterator trỏ đến ký tự cuối cùng của chuỗi
rendTrả 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