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
- 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. - Có thể dereference: Bạn có thể dereference (sử dụng toán tử
*
) iterator trả về bởibegin()
để truy cập giá trị của phần tử đầu tiên. - 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. - Phân biệt với
end()
:begin()
trỏ đến phần tử đầu tiên, trong khiend()
trỏ đến vị trí sau phần tử cuối cùng (past-the-end). - 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. - std::set rỗng: Nếu std::set rỗng thì
begin()
sẽ trả về giá trị giốngend()
. - 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.
- Độ 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
end | Trả về một iterator trỏ đến vị trí sau phần tử cuối cùng trong std::set |
rbegin | Trả về một reverse_iterator trỏ đến phần tử cuối cùng trong std::set |
rend | Trả về một reverse_iterator trỏ đến phần tử trước phần tử đầu tiên của std::set |