【问题标题】:C++ List of ArraysC++ 数组列表
【发布时间】:2014-04-29 14:36:29
【问题描述】:

我有一个数组如下:uint64_t MyArray[500]

我希望能够将 PUSHPOP 这个数组放到某种堆栈/列表中。
基本上我将在循环中使用该数组并且需要将 PUSH 数组放到某种堆栈/列表,以便稍后在循环中将其弹出...我将PUSHingPOPing将数组多次放入堆栈/列表,因此堆栈将沿方式。

如何在 C++ 中使用这样的堆栈/数组列表?我不想简单地声明一个二维数组,因为我无法预测大小......如果我可以使用某种我可以PUSH 和@987654328 的“数组列表”,将会更加清晰和强大@轻松。

【问题讨论】:

    标签: c++ arrays stack


    【解决方案1】:

    C++ 实现了一个可能有用的stack 包装器。但是建议您使用std::vector

    #include <stack and vector>
    
    vector<uint64_t> v(500);
    stack<vector<uint64_t>> sv;
    sv.push(v);
    sv.pop(v);
    

    【讨论】:

    • 如果他想保留原始的 C 数组类型,他可以只使用指针并改用 stack&lt;uint64_t*&gt;
    • 如果我使用这种方法,当我执行 sv.push(v) 时,它会将向量的副本推送到堆栈上吗?我想拍摄“数组”/向量的“快照”,然后继续使用它并稍后再次将其推送到堆栈上,并且介于两者之间的某个位置也会从堆栈中拉出(很多次)。我不想将指针推送到原始实例(在您的示例中为 v),因为当我继续使用 v 时,它将更改堆栈上的所有条目,因为它们都将是指向同一实例的指针。
    • 是的,您将推送副本
    • 我了解到堆栈是 LIFO... 而我需要 FIFO。我发现“队列”可以做到这一点。不知道如何使用它,但我会尝试解决它。​​
    • 在所有我想我会去这样的事情之后: struct objMyArray { uint64_t MyArray[500] };然后我可以使用这样的队列: queue MyArrayQueue;
    【解决方案2】:

    最简单的方法是创建一个stack&lt;uint64_t*&gt; 值。

    stack<uint64_t*> vector;
    stack.push(MyArray);
    stack.pop();
    

    请注意,这对管理MyArray 的内存没有任何作用。它只会将其视为指针值。

    【讨论】:

    • 我喜欢简洁。如果我创建了一个 MyArray 的新实例,它是它自己的副本,那么每次在将该副本推送到向量之前,是否会为我拍摄数据的“快照”/管理内存?
    • @TappaTappa 假设您复制了各个值,是的,它会
    • @JaredPar...我将如何管理数组副本的创建...它需要在范围内是“全局的”...而且我不知道我有多少副本需要一路走好!
    • 因为我需要 FIFO(我才知道堆栈是 LIFO),所以我会选择这样的东西:struct objMyArray { uint64_t MyArray[500] };然后我可以使用这样的队列: queue MyArrayQueue;
    猜你喜欢
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-25
    • 1970-01-01
    • 2011-08-05
    • 2017-11-19
    相关资源
    最近更新 更多