反转std::列表的内容
Reversing the contents of an std::list
class Print
{
public:
void PrintAll() {}
private:
std::list<int> mylist;
};
我从一本c++语言书中看到这个例子问题。我想打印mylist的内部元素。如果mylist需要反转,如何使用c++ STL库并使用来输出结果?
非常感谢!
std::list<>::reverse()
?
list
,您可以简单地使用list
的反向迭代器(由std::list<>::rbegin()
和std::list<>::rend()
获得)而不是使用list
的正常迭代器来打印它。例如:// given std::list<int> l;
for (std::list<int>::const_reverse_iterator iter(l.rbegin()), iter_end(l.rend());
iter != iter_end;
++iter)
{
std::cout << *iter << 'n';
}
您可以在列表中使用reverse()
方法。
mylist.reverse();
将反转列表的内容,然后可以使用迭代器打印相同的内容。
list<int>::iterator it;
cout << "mylist contains:";
for (it=mylist.begin(); it!=mylist.end(); ++it)
cout << " " << *it;
你可以把所有的功能包装在你自己的成员函数中。
您也可以使用容器提供的反向迭代器,例如l.rbegin()和l.rend(),它们将向后遍历列表。
list::reverse
代码示例// list_reverse.cpp
// compile with: /EHsc
#include <list>
#include <iostream>
int main( )
{
using namespace std;
list <int> c1;
list <int>::iterator c1_Iter;
c1.push_back( 10 );
c1.push_back( 20 );
c1.push_back( 30 );
cout << "c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
c1.reverse( );
cout << "Reversed c1 =";
for ( c1_Iter = c1.begin( ); c1_Iter != c1.end( ); c1_Iter++ )
cout << " " << *c1_Iter;
cout << endl;
}
输出将是
c1 = 10 20 30反向c1 = 30 20 10
迭代器直接指向列表中的当前元素。因此,如果我们写一个从end到begin的for循环,我们可以反过来打印列表。在下面的代码中:
#include <iostream>
#include <list>
using namespace std;
int main()
{
std::list<int> ii;
ii.push_back(1);
ii.push_back(2);
ii.push_back(3);
ii.push_back(4);
ii.push_back(5);
for (std::list<int>::iterator it = (ii.begin()); it != (ii.end()) ; ++it)
{
cout << (*it) << " ";
}
cout << endl;
for (std::list<int>::iterator it = (--ii.end()); it != (--ii.begin()) ; it--)
{
cout << (*it) << " ";
}
return 0;
}
第一个for循环从前到后打印列表,第二个for循环从后到前打印列表。
相关文章:
- 从嵌套在std::映射中的std::列表中删除元素的最佳方式
- C++如何生成std::数组列表
- std::vector 没有重载函数的实例与参数列表匹配
- 为什么这个 std::queue/指向结构的指针列表直到 List.Size() == 0 才释放内存?
- 将 std::thread by 值推送到列表中
- 转发变量参数列表以模拟 std::thread
- 使用大括号初始化 std::vector 使用初始值设定项列表
- 错误:"模板<类_Tp,类_Dp>类 std::unique_ptr"的模板参数列表中参数 1 的类型/值不匹配
- std::map, std::unordered_map - 缩小初始值设定项列表中的转换范围
- 如何按键对 std::对列表进行排序?
- 访问列表中的所有 std::变体,并为每次访问捕获附加值
- std::map与谓词与初始化列表
- 我可以列表初始化 std::vector 并完美转发元素吗?
- 将初始化器列表/聚合初始化转发到 std::array 成员
- 当返回语句时,逗号运算符、大括号初始化列表和 std::unique_ptr 组合在一起
- 为什么不能用两层列表初始值设定项初始化 2D std::array?
- 如何在构造函数初始值设定项列表中使用 n 个元素初始化 std::vector<std::time_t>
- C 初始化列表std ::数组最佳性能
- 与内存堆有关的C 链接列表(STD ::列表)是否使用新的
- 类模板的参数列表“;std::vector”;缺少