如何在c++中获取列表的倒数第二个元素



我刚刚开始用c++编程,并且有一点C的经验,但是在这个程序中我试图使用我完全不熟悉的c++库。

程序的目标很简单,我有一个链表,我需要得到列表的第二个到最后一个元素。我所做的是反转列表,使用反向函数,然后我试图获得新的列表的第二个元素,使用std::next,因为这将是我想要的元素。但是我无法打印对象,因为它要么打印指针值,要么当我偏离它说std:cout不能打印它,因为它不知道如何转换值。任何帮助都会很感激。提前谢谢。

#include <list>
#define LOG(x) std::cout << x << std::endl;
typedef std::list<int> list;
list *getNextXValue(list *Head, int x)
{
return std::next(Head, x);
}
/**
* @brief Find last element of a linked list of ints
*
* @return int Program ended correctly
*/
int main()
{
list listOne;
list *aux = NULL;
// Inserts all the elements in the list
for (int i = 0; i < 100; i++)
{
listOne.insert(listOne.end(), i);
}
listOne.reverse();
aux = getNextXValue(&listOne, 1);
LOG(*aux);
return 0;
}

我试图使用std::next获取列表的第二个新元素。

你不是在获取列表的第二个新元素,你要获取的是下一个新地址,因为传递的是指针,是列表的地址,而不是迭代器:

list *getNextXValue(list *Head, int x)
{
return std::next(Head, x);
}

试试这个:

#include <iostream>
#include <list>
#define LOG(x) std::cout << x << std::endl;
typedef std::list<int> list;
std::list<int>::iterator getNextXValue(std::list<int>::iterator Head, int x) {
return std::next(Head, x);
}
/**
* @brief Find last element of a linked list of ints
*
* @return int Program ended correctly
*/
int main() {
list listOne;
list *aux = NULL;
// Inserts all the elements in the list
for (int i = 0; i < 100; i++) {
listOne.insert(listOne.end(), i);
}
listOne.reverse();
auto next = getNextXValue(listOne.begin(), 1);
std::cout << *next << std::endl;
return 0;
}

我认为你可以这样做:std::list<int> l = {1, 2, 3}; // (types shouldn't matter), you can do *std::prev(l.end(), 2);

相关内容

  • 没有找到相关文章