【问题标题】:how can i store array to queue in c++我如何将数组存储到 C++ 中的队列中
【发布时间】:2012-11-20 17:38:42
【问题描述】:
queue < int* > qq;

for (int i = 0; i < N; i++) {
    int cc[2] = {i, i + 1};
    qq.push(cc);
}

N 很大但不精确,所以我想使用队列。 我想存储很多数组来排队,但是qq存储的数组是同一个。 我该怎么做?

【问题讨论】:

    标签: c++ arrays queue


    【解决方案1】:

    你所做的是句法正确,但概念错误。您正在插入在每次迭代中创建并在迭代结束时销毁的本地数组;这使qq 处于不可用状态。在循环之外,取消引用 qq 的任何元素都会调用未定义的行为。

    使用std::vector:

    std::queue<std::vector<int>> qq;
    
    for (int i = 0; i < N; i++) {
        std::vector<int> cc{i, i + 1};
        qq.push(cc);
    }
    

    【讨论】:

    • 谢谢。也许是时候扔掉数组了。
    【解决方案2】:

    您的代码不起作用。每个cc 在循环中都有相同的堆栈位置。

    您需要在堆中分配cc 数组,可能使用int *cc = new int[2];(但稍后您需要delete)。

    更好的方法是将cc 声明为std::vectorstd::arraystd::tuple(在C++11 中)。

    【讨论】:

    • 太棒了。有用。谢谢 。但有什么区别?它在 C 和 C++ 之间?
    【解决方案3】:

    您每次推送相同的地址,即cc。您需要定义一个包含这两个值的结构,如下所示:

    struct CC {
        int x, y;
        CC(int _x, int _y) : x(_x), y(_y) {}
    }
    
    queue<CC> qq;
    

    然后..

    qq.push(CC(i, i + 1));
    

    【讨论】:

    • struct 不是很好,实际上 cc 是一个长数组,而不仅仅是两个成员。还是谢谢你们。
    猜你喜欢
    • 2020-01-22
    • 2021-01-28
    • 1970-01-01
    • 1970-01-01
    • 2018-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-04
    相关资源
    最近更新 更多