【问题标题】:Printing an std::queue of 2D vector打印二维向量的 std::queue
【发布时间】:2021-05-28 18:49:30
【问题描述】:

我正在尝试创建一个 2D 矢量队列,并在每次推送矢量时查看它的内容。 我试图实现这一点并用在我的脑海中打印 2D 矢量的想法来打印它。我也试过网上的一些模板。

显然,它不适用于二维向量队列。我也不明白错误消息,因为我对 C++ 还是很陌生,所以我不知道如何解决这个问题或为什么不允许这样做。

这是我尝试过但不起作用的方法:

#include <iostream>
#include <vector>
#include <queue>
#include <string>

using namespace std;

int main()
{
    vector<vector<char>> v = {{'a','b'},{'c','d'}};

    queue<vector<vector<char>>> my_queue;
    my_queue.push(v);

    /*for (unsigned int i = 0; i < my_queue.size(); i++) {
        cout << my_queue.front() << " ";
        my_queue.pop();
    }
    cout << endl;*/

    for (unsigned int i = 0; i < my_queue.size(); i++) {
        for (unsigned int j = 0; j < my_queue[i].size(); j++) {
            cout << my_queue.front() << " ";
            my_queue.pop();
        }
        cout << endl;
    }

    return 0;
}

编辑

错误信息中我不明白的部分是:

main.cpp:34:9: error: no match for ‘operator<<’ (operand types are ‘std::ostream {aka std::basic_ostream}’ and ‘__gnu_cxx::__alloc_traits > >>::value_type {aka std::vector >}’) cout << my_queue.front() << " ";

任何想法都会有所帮助。

编辑 2:解决方案

经过多次试验,我终于找到了一种方法,它适用于我的情况:

void State::PrintQueue(queue<vector<vector<char>>> q){
    if (q.empty()){
        cout << "\n[Queue is empty!]" << endl;
        return;
    }
    vector<vector<char>> x = q.front();
    q.pop();
    for (auto& row : x) {
        for (auto& s : row) {
            cout << s << ' ';
        }
        cout << endl;
    }
    cout << endl;
    PrintQueue(q);
    q.push(x);
}

但是!,这似乎不是很有效。

我也想知道是否有办法为此制作模板?我已经尝试了所有模板,但我仍然对模板非常缺乏经验。

【问题讨论】:

    标签: c++ queue 2d-vector


    【解决方案1】:

    错误信息应该足够了..

    错误:“operator[]”不匹配(操作数类型为“std::queue”和“int”)

    没有 my_queue[x]

    你需要做类似的事情

    while (!my_queue.empty())
    {
        // your logic
        my_queue.pop();
    }
    

    【讨论】:

    • 我已经用我尝试打印的第一种方式编辑了我的帖子,我的两个 for 循环是我尝试过的,因为第一种方法不起作用并给出了我添加到帖子中的错误。使用两个 for 循环会给出您在此处所述的明显错误。很抱歉造成混乱
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-28
    • 1970-01-01
    • 2016-12-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多