Tôi đã viết mẫu vùng chứa của riêng mình với một trình lặp. Làm cách nào để triển khai const_iterator?C++: Làm thế nào để viết một const_iterator?
template <class T>
class my_container {
private:
...
public:
my_container() : ... { }
~my_container() { }
class iterator : public std::iterator<std::bidirectional_iterator_tag, T> {
public: ...
Điều gì về các phương thức lấy biến lặp làm đối số hoặc trả về trình lặp? Tôi phải quá tải chúng cho const_iterators? Có vẻ như một loạt các mã lặp đi lặp lại. –
trình lặp nên được chuyển đổi thành const_iterators, vì vậy bạn sẽ không phải quá tải nếu bạn chỉ cần một const_iterator. Bạn làm cho các hàm như begin(), end(), nhưng không có cách nào xung quanh, vì const cũng là một phần của chữ ký của phương thức. –
@ Posco Grubb: Không. Nếu bạn có các phương thức lấy các trình vòng lặp thì các khuôn mẫu của chúng. Phương thức này sẽ làm việc cho bất kỳ thứ gì hoạt động như một trình lặp. Nếu phương thức yêu cầu một trình lặp (iterator) hơn là một trình soạn thảo const_iterator, trình biên dịch sẽ tạo ra lỗi thích hợp. –