25

我有一个list

list<Student>* l;

我想在指定索引处获取一个元素。例子:

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

是否有list 使其能够做到这一点的功能或方法?

4

4 回答 4

29

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确实具有随机访问迭代器,因此如果您有 C++11 支持、运算符或成员函数,则可以通过std::advance, std::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 回答
6

这是一个返回th in的get()函数。_iStudent_list

Student get(list<Student> _list, int _i){
    list<Student>::iterator it = _list.begin();
    for(int i=0; i<_i; i++){
        ++it;
    }
    return *it;
}
于 2015-01-16T03:53:57.137 回答
2

如果你想随机访问元素,你应该使用 avector然后你可以使用[]operator 来获取第 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 回答