nie ma iteratora dostępu losowego, dlatego należy wykonać 4-krotny krok z iteratora przedniego. Możesz to zrobić ręcznie lub z std::advance lub std::next w C++ 11, ale pamiętaj, że obie operacje O (N) dla listy.
#include <iterator>
#include <list>
....
std::list<Student> l; // look, no pointers!
auto l_front = l.begin();
std::advance(l_front, 4);
std::cout << *l_front << '\n';
Edit: Oryginalny pytanie poproszony o wektorze też. To teraz nieistotne, ale mimo to może być pouczające:
std::vector
ma przypadkowych iteratory dostępu, dzięki czemu można wykonać równoważne działanie w czasie O (1) za pośrednictwem std::advance
, std::next jeśli masz 11 wsparcie C++ []
operator lub funkcja at()
członkiem:
std::vector<Student> v = ...;
std::cout << v[4] << '\n'; // UB if v has less than 4 elements
std::cout << v.at(4) << '\n'; // throws if v has less than 4 elements
To nasuwa pytanie: dlaczego? Czy na pewno chcesz listę? –
Oprócz tego, co powiedział @LightnessRacesinOrbit, jeśli jesteś pewien, że potrzebujesz "listy", czy na pewno chcesz * wskaźnik * do "listy"? – juanchopanza