我需要返回指向列表中某个值的指针
std::vector<std::list<int>> lists;
...
if(lists.at(i).front()==val){
//return a pointer after the first value
return ptr;
}
我能想到的最好方法是使用std::next
,但我不知道如何让它返回一个指针
答案 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();
}