如何获得列表中的某个元素,给定的位置?
所以我有一个列表:
list<Object> myList; myList.push_back(Object myObject);
我不确定,但我相信这将是数组中的“第0”元素。 有什么function,我可以使用,将返回“myObject”?
Object copy = myList.find_element(0);
?
如果您经常需要访问序列的第N个元素,那么作为双向链表实施的std::list
可能不是正确的select。 std::vector
或std::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::list
, std::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 }