如何获得列表中的某个元素,给定的位置?

所以我有一个列表:

list<Object> myList; myList.push_back(Object myObject); 

我不确定,但我相信这将是数组中的“第0”元素。 有什么function,我可以使用,将返回“myObject”?

 Object copy = myList.find_element(0); 

如果您经常需要访问序列的第N个元素,那么作为双向链表实施的std::list可能不是正确的select。 std::vectorstd::deque可能会更好。

也就是说,你可以使用std::advance获得第N个元素的迭代器:

 std::list<Object> l; // add elements to list 'l'... unsigned N = /* index of the element you want to retrieve */; if (l.size() > N) { std::list<Object>::iterator it = l.begin(); std::advance(it, N); // 'it' points to the element at index 'N' } 

对于不提供随机访问的容器,比如std::liststd::advance在迭代器上调用operator++ N次。 另外,如果你的标准库实现提供了它,你可以调用std::next

 if (l.size() > N) { std::list<Object>::iterator it = std::next(l.begin(), N); } 

std::next有效地包装了一个对std::advance的调用,这使得用更less的代码行和更less的可变variables更容易地将迭代器推进N次。 std::next被添加到C ++ 11中。

std::list不提供任何函数来获取给定索引的元素。 你可以尝试通过编写一些我不推荐的代码来获得它,因为如果你经常需要这样做,那将是低效的。

你需要的是: std::vector 。 使用它作为:

 std::vector<Object> objects; objects.push_back(myObject); Object obj = objects[0]; //get element given an index 
 std::list<Object> l; std::list<Object>::iterator ptr; int i; for( i = 0 , ptr = l.begin() ; i < N && ptr != l.end() ; i++ , ptr++ ); if( ptr == l.end() ) { // list too short } else { // 'ptr' points to N-th element of list }