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

std::string::cend

#include <string>

const_iterator cend() const noexcept;

Trả về một const iterator trỏ đến vị trí ngay sau ký tự cuối cùng của chuỗi. 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. const_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_iterator

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

Đặc điểm

  1. cend() luôn trả về const_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ừ cend().
  2. Iterator trả về bởi cend() 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.cend() là không hợp lệ).
  3. Phạm vi [cbegin, cend) là "nửa mở", bao gồm phần tử cbegin nhưng không bao gồm phần tử cend.
  4. cend() luôn trả về const_iterator, kể cả khi đối tượng std::string là non-const.
  5. const_iterator chỉ cho phép đọc, không cho phép thay đổi giá trị của phần tử mà nó trỏ đến.
  6. cend() 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 vào chuỗi.
  7. cend() 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 const iterator (từ cbegin() đến cend()).
    • Kết hợp với các thuật toán trong thư viện <algorithm> để thao tác với chuỗi (nhưng chỉ các thuật toán không làm thay đổi nội dung chuỗi, ví dụ: std::for_each, std::find, ...).
    • Kiểm tra xem const 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 const_iterator, cbegin() và cend()
std::cout << "Chuỗi (sử dụng cbegin và cend): ";
for (auto it = str.cbegin(); it != str.cend(); ++it) {
std::cout << *it;
}
std::cout << std::endl;

// Sử dụng std::find với cbegin() và cend()
auto it = std::find(str.cbegin(), str.cend(), ',');
if (it != str.cend()) {
std::cout << "Dấu phẩy được tìm thấy tại vị trí: " << (it - str.cbegin()) << std::endl;
}

return 0;
}

Các hàm liên quan

endTrả về một iterator trỏ đến vị trí ngay sau ký tự cuối cùng của chuỗi std::string
cbeginTrả về một const iterator trỏ đến ký tự đầu tiên của chuỗi
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