25

私は持っていlistます:

list<Student>* l;

指定されたインデックスで要素を取得したいと思います。例:

l->get(4)//getting 4th element

それを可能にする関数または方法はlist ありますか?

4

4 に答える 4

29

std::listにはランダム アクセス イテレータがないため、先頭のイテレータから 4 回ステップする必要があります。これは手動で、またはC++11 のstd::advanceまたは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にはランダム アクセス イテレータがあるため、C++11 サポート、演算子、またはメンバー関数がある場合はstd::advancestd::nextを介して O(1) で同等の操作を実行できます。[]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
于 2013-05-25T07:54:32.283 に答える
2

要素へのランダム アクセスが必要な場合は、a を使用してから、演算子をvector使用して 4 番目の要素を取得できます。[]

vector<Student> myvector (5); // initializes the vector with 5 elements`
myvector[3]; // gets the 4th element in the vector
于 2013-05-25T07:56:06.577 に答える
0

std::vectorあなたが使用することができます

myVector.at(i)// i 番目の要素を取得する

于 2013-05-25T07:56:02.127 に答える