私はlist
を持っています:
list<Student>* l;
指定したインデックスの要素を取得したいと思います。例:
l->get(4)//getting 4th element
list
にそれを可能にする関数またはメソッドはありますか?
_std::list
_にはランダムアクセスイテレータがないため、フロントイテレータから4回ステップ実行する必要があります。これは手動で、または std :: advance 、またはC++ 11では std :: next を使用して実行できますが、両方のO(N)リストの操作。
_#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';
_
編集:元の質問はベクトルについても尋ねました。これは今は無関係ですが、それでも有益かもしれません:
_std::vector
_にはランダムアクセス反復子があるため、O(1) __std::advance
_、 std :: next を使用して同等の操作を実行できます= C++ 11サポートがある場合、_[]
_演算子、またはat()
メンバー関数:
_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
_
__i
_で__list
_ th Student
を返すget()
関数を次に示します。
_Student get(list<Student> _list, int _i){
list<Student>::iterator it = _list.begin();
for(int i=0; i<_i; i++){
++it;
}
return *it;
}
_
要素へのランダムアクセスが必要な場合は、vector
を使用してから、[]
演算子を使用して4番目の要素を取得できます。
vector<Student> myvector (5); // initializes the vector with 5 elements`
myvector[3]; // gets the 4th element in the vector
_std::vector
_の場合は、
myVector.at(i)
// i番目の要素を取得する