web-dev-qa-db-ja.com

C ++リストから指定されたインデックスの要素を取得する方法

私はlistを持っています:

list<Student>* l;

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

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

listにそれを可能にする関数またはメソッドはありますか?

8
user2398815

_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
_
10
juanchopanza

__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;
}
_
4
Patch92

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

vector<Student> myvector (5); // initializes the vector with 5 elements`
myvector[3]; // gets the 4th element in the vector
2
srikfreak

_std::vector_の場合は、

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

1
simpleuser