指向列表向量中的第n个元素的指针

时间:2018-04-01 01:19:02

标签: c++ list pointers vector

我需要返回指向列表中某个值的指针

std::vector<std::list<int>> lists;
...
if(lists.at(i).front()==val){
   //return a pointer after the first value
   return ptr;
}

我能想到的最好方法是使用std::next,但我不知道如何让它返回一个指针

3 个答案:

答案 0 :(得分:0)

  

我能想到的最好方法是使用std::next,但我不知道如何让它返回一个指针

std::next返回一个迭代器。您可以使用间接运算符来获取指向的对象。您可以使用addressof运算符来获取该对象的内存地址(即指针)。所以:

auto it = whatever; // iterator to the object whose pointer you want
return &*it;        // return the pointer

int无关,但在某些极少数情况下,如果该类型的运营商地址过载,则可能需要使用std::addressof

另外,我建议考虑返回指针而不是迭代器本身是否有意义。

答案 1 :(得分:0)

迭代器只是“更好”的指针。也就是说,您可以将它们用作指针(通过取消引用它们来访问值)

*int

如果您真的希望返回指针类型std::list<int>::iterator,而不是return &(*it); ,则取消引用它并再次获得引用

{{1}}

有关迭代器的更多信息,您可以查看here。您可以看到有许多类型的迭代器,但所有迭代器都可以取消引用,就像它们是指针一样。

std :: list&lt;&gt;:迭代器是双向迭代器(它们没有随机访问权限,但你可以一次一个元素,向前或向后移动它们)

答案 2 :(得分:0)

我想到了这样一个函数:

std::list<int>::iterator get(std::vector<std::list<int>>& lists, int i,int val)
{
   assert(i<lists.size());

   if(lists.at(i).front()==val)
    {
       //return a pointer after the first value
       std::list<int>::iterator it = lists.at(i).begin();
      return it++;
   } 
    return lists.at(i).end();
}