2012-02-15 22 views
7

Sự khác biệt giữa các chức năng front()begin() xuất hiện trong nhiều vùng chứa STL là gì?Sự khác nhau giữa trước() và bắt đầu()

+4

'front()' giống hệt '* begin()'. – ildjarn

+0

Tại sao điều này lại bị downvoted: S? Đó là một câu hỏi hợp lệ, ồ. –

+1

Nút downvote cho biết "câu hỏi này không hiển thị bất kỳ nỗ lực nghiên cứu nào" - có vẻ khá phù hợp. – ildjarn

Trả lời

12

begin() trả về trình lặp có thể được sử dụng để lặp qua bộ sưu tập, trong khi front() chỉ trả về tham chiếu đến phần tử đầu tiên của bộ sưu tập.

+5

+1 Chỉ để làm cho mọi thứ rõ ràng hơn (hoặc có thể phức tạp): '& c.front() == & * c.begin()' cho bất kỳ vùng chứa nào có ít nhất một phần tử. So sánh địa chỉ * của * các biểu thức được sử dụng để chứng minh rằng nó không phải là các giá trị * * giống nhau, nhưng các * đối tượng * (tức là 'c.front()' đưa ra một tham chiếu đến cùng một đối tượng mà dereferencing bắt đầu iterator '* c.begin()'). –

2

front() trả về tham chiếu đến phần tử đầu tiên, begin() trả về một trình lặp cho nó.

Lưu ý rằng bạn không nên gọi số front trên vùng chứa trống, nhưng bạn có thể gọi begin miễn là bạn không coi trọng trình lặp đó là begin trả về.

+4

'begin()' cũng hoạt động nếu không có phần tử đầu tiên. –

0

Thành viên front trả về tham chiếu đến thành viên đầu tiên của danh sách hoặc vectơ. Hàm begin trả về một trình lặp (giống như một con trỏ) được khởi tạo cho thành viên đầu tiên của danh sách, bản đồ hoặc vectơ.

1

Từ http://www.cplusplus.com/reference/stl/vector/begin/ (nghĩa đen là kết quả google đầu tiên cho "vector :: bắt đầu"):

Chú ý rằng không giống như thành viên vector::front, mà trả về một tham chiếu đến phần tử đầu tiên, hàm này trả về một iterator truy cập ngẫu nhiên.

Các vấn đề liên quan