# How to use \`iterate(s::Stack)\` and \`Iterators.reverse(s::Stack{T})\` for Stack and Queue in DataStructures.jl?

**URL:** <https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394>\
**Category:** New to Julia\
**Created:** [April 16, 2021, 9:00am UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394 "2021-04-16T09:00:11Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![vladgladkikh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vladgladkikh/32/24087_2.png) [@vladgladkikh](https://discourse.julialang.org/u/vladgladkikh)\
**Post date:** [April 16, 2021, 9:00am UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/1 "2021-04-16T09:00:11Z")

</div>

I am reading documentation for DataStructures.jl, namely this page: [Stack and Queue · DataStructures.jl](https://juliacollections.github.io/DataStructures.jl/latest/stack_and_queue/) and cannot figure out how to use `iterate(s::Stack)` and `Iterators.reverse(s::Stack{T})`?

I try this:

```
s = Stack{Int}()
for i ∈ 1:5
    push!(s,i)
end

for i ∈ iterate(s)
    println(i)
end

```

and getting something that I don’t understand:

```
5
(DataStructures.DequeBlock{Int64}(capa = 1024, front = 1, back = 5): [1, 2, 3, 4, 5], 4)

```

How to iterate properly?

---

<div class="post-metadata">

**Author:** ![sostock](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sostock/32/5546_2.png) [@sostock](https://discourse.julialang.org/u/sostock)\
**Post date:** [April 16, 2021, 11:17am UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/2 "2021-04-16T11:17:07Z")

</div>

You don’t need `iterate` here:

```julia
julia> for i ∈ s
           println(i)
       end
5
4
3
2
1

julia> for i ∈ Iterators.reverse(s)
           println(i)
       end
1
2
3
4
5

```

---

<div class="post-metadata">

**Author:** ![vladgladkikh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vladgladkikh/32/24087_2.png) [@vladgladkikh](https://discourse.julialang.org/u/vladgladkikh)\
**Post date:** [April 16, 2021, 11:28am UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/3 "2021-04-16T11:28:20Z")

</div>

```
for i ∈ Iterators.reverse(s)
    println(i)
end

```

gives an error

```
MethodError: no method matching iterate(::Base.Iterators.Reverse{Stack{Int64}})

```

---

<div class="post-metadata">

**Author:** ![sostock](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sostock/32/5546_2.png) [@sostock](https://discourse.julialang.org/u/sostock)\
**Post date:** [April 16, 2021, 11:42am UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/4 "2021-04-16T11:42:40Z")

</div>

What version of DataStructures.jl are you using? It looks like support for `Iterators.reverse` was added in [version 0.18.4](https://github.com/JuliaCollections/DataStructures.jl/releases/tag/v0.18.4). You can find out what version you are running with `] st DataStructures` in the REPL.

---

<div class="post-metadata">

**Author:** ![Henrique\_Becker](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/henrique_becker/32/15443_2.png) [@Henrique\_Becker](https://discourse.julialang.org/u/Henrique_Becker)\
**Post date:** [April 16, 2021, 12:43pm UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/5 "2021-04-16T12:43:08Z")

</div>

It seems strange to me that `Stack` would support `Iterators.reverse`, one of the defining characteristic of a `Stack` is only allowing access to the top element.

---

<div class="post-metadata">

**Author:** ![vladgladkikh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vladgladkikh/32/24087_2.png) [@vladgladkikh](https://discourse.julialang.org/u/vladgladkikh)\
**Post date:** [April 17, 2021, 11:46am UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/6 "2021-04-17T11:46:18Z")

</div>

`v0.17.20`, Julia 1.5.3 How to update `DataStructures` to the latest in REPL? `up DataStructures` does not update it.

---

<div class="post-metadata">

**Author:** ![sostock](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/sostock/32/5546_2.png) [@sostock](https://discourse.julialang.org/u/sostock)\
**Post date:** [April 17, 2021, 11:53am UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/7 "2021-04-17T11:53:52Z")

</div>

Most likely, that means some other package is holding it back (by having it as a dependency, restricted to `v0.17`). Can you try `add DataStructures@0.18`?

---

<div class="post-metadata">

**Author:** ![vladgladkikh](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/vladgladkikh/32/24087_2.png) [@vladgladkikh](https://discourse.julialang.org/u/vladgladkikh)\
**Post date:** [April 17, 2021, 12:06pm UTC](https://discourse.julialang.org/t/how-to-use-iterate-s-stack-and-iterators-reverse-s-stack-t-for-stack-and-queue-in-datastructures-jl/59394/8 "2021-04-17T12:06:51Z")

</div>

Thanks! It works. First it gave me the error: `ERROR: Unsatisfiable requirements detected for package Lasso`. I don’t need `Lasso` for now, so I removed it, then `add DataStructures@0.18` updated it to `v0.18.9`
