title: Slice and iter() simultaneously
body: <p>I am trying to figure out why this does not work (<a href="https://play.rust-lang.org/?gist=15f67014fa6badd1a99183b620d82b36&amp;version=stable&amp;backtrace=0" rel="noreferrer">Playground</a>):</p>
  
  <pre><code>fn main() {
      let a = vec![1, 2, 3, 4];
      let b = a.clone();
      // slice and iter (wrong way)
      let s: i32 = &amp;a[1..a.len()].iter()
          .zip(&amp;b[1..b.len()].iter())
          .map(|(x, y)| x * y)
          .sum();
      println!("{}", s);
  }
  </code></pre>
  
  <p>Error:</p>
  
  <pre class="lang-none prettyprint-override"><code>rustc 1.13.0 (2c6933acc 2016-11-07)
  error[E0277]: the trait bound `&amp;std::slice::Iter&lt;'_, {integer}&gt;: std::iter::Iterator` is not satisfied
   --&gt; &lt;anon&gt;:6:10
    |
  6 |         .zip(&amp;b[1..b.len()].iter())
    |          ^^^ trait `&amp;std::slice::Iter&lt;'_, {integer}&gt;: std::iter::Iterator` not satisfied
    |
    = note: `&amp;std::slice::Iter&lt;'_, {integer}&gt;` is not an iterator; maybe try calling `.iter()` or a similar method
    = note: required because of the requirements on the impl of `std::iter::IntoIterator` for `&amp;std::slice::Iter&lt;'_, {integer}&gt;`
  
  error: no method named `map` found for type `std::iter::Zip&lt;std::slice::Iter&lt;'_, {integer}&gt;, &amp;std::slice::Iter&lt;'_, {integer}&gt;&gt;` in the current scope
   --&gt; &lt;anon&gt;:7:10
    |
  7 |         .map(|(x, y)| x * y)
    |          ^^^
    |
    = note: the method `map` exists but the following trait bounds were not satisfied: `&amp;std::slice::Iter&lt;'_, {integer}&gt; : std::iter::Iterator`, `std::iter::Zip&lt;std::slice::Iter&lt;'_, {integer}&gt;, &amp;std::slice::Iter&lt;'_, {integer}&gt;&gt; : std::iter::Iterator`
  </code></pre>
  
  <p>But this does work:</p>
  
  <pre><code>fn main() {
      let a = vec![1, 2, 3, 4];
      let b = a.clone();
      // slice and iter (correct way)
      let s: i32 = a[1..a.len()].iter()
          .zip(b[1..b.len()].iter())
          .map(|(x, y)| x * y)
          .sum();
      println!("{}", s);
  }
  </code></pre>
  
  <p>Please explain how vectors work in Rust and the difference above when I <code>iter()</code>.</p>