Nếu bạn thường xuyên cần truy cập phần tử thứ N của một chuỗi, std::list
được triển khai dưới dạng danh sách được liên kết kép, có lẽ không phải là lựa chọn phù hợp. std::vector
hoặc std::deque
có thể sẽ tốt hơn.
Điều đó nói rằng, bạn có thể nhận được một trình lặp đến phần tử thứ N bằng cách sử dụng std::advance
:
std::list<Object> l;
// add elements to list 'l'...
unsigned N = /* index of the element you want to retrieve */;
if (l.size() > N)
{
std::list<Object>::iterator it = l.begin();
std::advance(it, N);
// 'it' points to the element at index 'N'
}
Đối với một vùng chứa không cung cấp quyền truy cập ngẫu nhiên, chẳng hạn như std::list
, std::advance
các cuộc gọi operator++
vào N
lần lặp lại . Ngoài ra, nếu việc triển khai Thư viện chuẩn của bạn cung cấp nó, bạn có thể gọi std::next
:
if (l.size() > N)
{
std::list<Object>::iterator it = std::next(l.begin(), N);
}
std::next
là kết thúc một cách hiệu quả một lời gọi đến std::advance
, giúp dễ dàng tăng N
thời gian trình lặp với ít dòng mã hơn và ít biến có thể thay đổi hơn. std::next
đã được thêm vào C ++ 11.
vector
thay thế?