【问题标题】:How to print a deque from the end?如何从末尾打印双端队列?
【发布时间】:2018-08-23 16:34:32
【问题描述】:

问题很简单,我如何从后面打印双端队列。示例:我有一个包含元素 {5,4,3,2,1} 的双端队列。我想打印那个双端队列,但从最后一个元素开始,所以我的屏幕上应该有类似 1 2 3 4 5 的东西。

通常的for(int i(deque.size()); i > 0; i--) 循环显然行不通。 该程序的小介绍。它找到总和为偶数或奇数的数字,并将它们分类为要在屏幕上打印的两个不同的双端队列。 这是适用于“常规”打印的代码。但我的任务是把它们向后打印。 哦,使用 push_front 函数将元素添加到双端队列。不,我不允许使用 push_back 来“修复”它。

void PrintDek(Dek v4) {
for (int i(0); i < v4.size(); i++) {
    std::cout << v4[i];
    if (i != v4.size() - 1) std::cout << ",";
}
}

如果你们中的一些人觉得需要整个程序的代码,我会编辑我的帖子。

【问题讨论】:

  • 请展示您的尝试以及它如何不起作用。
  • 为什么for(int i(deque.size()); i &gt; 0; i--) 不起作用?
  • 睡眠不足或缺乏知识,应该是deque.size()-1,它会起作用的。这实际上解决了它。

标签: c++ c++11 deque


【解决方案1】:

因此,在睡了几个小时之后看到我的代码(根据我的时区,这个问题是在凌晨 2 点之后发布的),我开始意识到我的错误是什么。通过使用deque.size() 并一直移动到size() 函数返回的值,我实际上超出了范围,访问了内存的禁止部分。 简单的deque.size()-1 现在可以使用了。所以循环看起来像这样for(int i(deque.size()-1); i &gt;= 0; i--)

【讨论】:

    【解决方案2】:

    您可以使用reverse iterators。见http://en.cppreference.com/w/cpp/container/deque/rbegin

    for(auto iter = deque.rbegin(); iter != deque.rend(); ++iter) {
        // do stuff
    }
    

    【讨论】:

    • 如何以我上面使用的方式打印,如deque[i]。我收到此错误消息严重性代码描述项目文件行抑制状态错误(活动)E0349 没有运算符“[]”与这些操作数匹配 Zadatak 4 c:\Users\HARI 256 SSD 8GB\Documents\TP Tutorijali\Tutorijal 3\Zadatak 4\ Zadatak 4\Zadatak 4.cpp 55
    • @Rose Print *iter.
    • @Rose 使用迭代器时,调用重载的* 运算符来获取值。对于您的情况,请执行std::cout &lt;&lt; *iter;。请在en.cppreference.com/w/cpp/concept/Iterator阅读有关迭代器的信息。
    猜你喜欢
    • 2023-04-02
    • 2016-05-11
    • 2017-04-03
    • 2020-04-13
    • 1970-01-01
    • 2018-07-02
    • 1970-01-01
    • 2014-04-12
    • 1970-01-01
    相关资源
    最近更新 更多