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

std::set::begin

#include <set>

      iterator begin() noexcept;
const_iterator begin() const noexcept;

Trả về một iterator trỏ đến phần tử đầu tiên trong std::set. Do std::set lưu trữ các phần tử theo thứ tự được sắp xếp, phần tử đầu tiên mà begin() trỏ tới sẽ là phần tử nhỏ nhất (theo tiêu chí so sánh được sử dụng khi khởi tạo std::set).

Tham số

Không có tham số

Giá trị trả về

  • iterator (phiên bản không const): Trả về một iterator có thể đọc và ghi, trỏ đến phần tử đầu tiên trong std::set. Tuy nhiên, bạn không được phép thay đổi giá trị của phần tử thông qua iterator này vì điều đó có thể làm hỏng thứ tự sắp xếp của std::set.
  • const_iterator (phiên bản const): Trả về một iterator chỉ đọc, trỏ đến phần tử đầu tiên trong std::set. Phiên bản này được sử dụng khi std::set là một đối tượng const.

Đặc điểm

  1. Trỏ đến phần tử đầu tiên (nhỏ nhất): begin() luôn trả về iterator trỏ đến phần tử đầu tiên trong std::set theo thứ tự đã sắp xếp.
  2. Có thể dereference: Bạn có thể dereference (sử dụng toán tử *) iterator trả về bởi begin() để truy cập giá trị của phần tử đầu tiên.
  3. noexcept: Cả hai phiên bản của begin() đều được đánh dấu là noexcept, nghĩa là chúng được đảm bảo không ném ra ngoại lệ nào.
  4. Phân biệt với end(): begin() trỏ đến phần tử đầu tiên, trong khi end() trỏ đến vị trí sau phần tử cuối cùng (past-the-end).
  5. Không làm thay đổi set: Gọi begin() không làm thay đổi nội dung hay trạng thái của std::set.
  6. std::set rỗng: Nếu std::set rỗng thì begin() sẽ trả về giá trị giống end().
  7. Không thể thay đổi giá trị key: Mặc dù phiên bản iterator cho phép thay đổi giá trị phần tử, bạn không được phép thay đổi giá trị của phần tử trong std::set theo cách làm thay đổi thứ tự sắp xếp. Cố gắng thay đổi key của phần tử có thể dẫn đến hành vi không xác định.
  8. Độ phức tạp: O(1) - thời gian hằng số.

Ví dụ

#include <iostream>
#include <set>

int main() {
std::set<int> myset = {5, 2, 8, 1, 9, 4};

// Duyệt danh sách sử dụng begin() và end()
std::cout << "myset:";
for (auto it = myset.begin(); it != myset.end(); ++it) {
std::cout << ' ' << *it;
}
std::cout << '\n'; // Output: myset: 1 2 4 5 8 9

// Sử dụng begin() để truy cập phần tử đầu tiên
std::cout << "First element: " << *myset.begin() << '\n'; // Output: First element: 1

return 0;
}

Các hàm liên quan

endTrả về một iterator trỏ đến vị trí sau phần tử cuối cùng trong std::set
rbeginTrả về một reverse_iterator trỏ đến phần tử cuối cùng trong std::set
rendTrả về một reverse_iterator trỏ đến phần tử trước phần tử đầu tiên của std::set