Tôi đang cố gắng để làm một vòng lặp đôi trên một std :: danh sách để hoạt động trên mỗi cặp của các yếu tố. Tuy nhiên, tôi đang gặp một số rắc rối khi khởi tạo trình lặp thứ hai. Mã tôi muốn viết là:Làm thế nào để xây dựng một std :: danh sách iterator trong vòng lặp với gia số
for(std::list<int>::iterator i = l.begin(); i != l.end(); ++i) {
for(std::list<int>::iterator j = i+1; j != l.end(); ++j) {
...
}
}
Điều đó không hiệu quả vì danh sách vòng lặp không truy cập ngẫu nhiên, vì vậy bạn không thể +1. Nhưng tôi đang gặp khó khăn khi tìm một giải pháp thay thế gọn gàng; trình biên dịch dường như không hài lòng với std::list<int>::iterator j(i)++;
mà tôi đã có một số hy vọng. Đạt được những gì tôi muốn có vẻ như tôi sẽ phải có một số tăng thêm khó xử mà sẽ không phù hợp với cấu trúc của vòng lặp độc đáo.
Có các lựa chọn thay thế rõ ràng (sử dụng vectơ chẳng hạn!) Nhưng có vẻ như với tôi rằng cần có một số cách hợp lý để làm điều này mà tôi không thấy lúc này.
Cảm ơn trước sự giúp đỡ nào :)
'trước' không có giá trị trả lại, nó sửa đổi đối số đầu tiên. (Mà cá nhân tôi không thích.) Điều đó nói rằng, thật dễ dàng để viết một hàm 'advance_copy'. – GManNickG
@GMan: Đã sửa lỗi. Ty! – dirkgently
Không sao cả. Tôi quyết định đi với ý tưởng của tôi như là một câu trả lời thay thế. – GManNickG