Блог пользователя lyyllyyl

Автор lyyllyyl, история, 8 лет назад, По-английски

I was learning some builtin functions in STL. And I wrote these code.

#include <bits/stdc++.h>

int main() {
  std::deque<int> tmp{1, 2, 3};
  std::transform(tmp.begin(), tmp.end(), std::back_insert_iterator<std::deque<int>>(tmp), std::negate<>());
  std::copy(tmp.begin(), tmp.end(), std::ostream_iterator<int> (std::cout, "\n"));

  std::vector<int> now{1, 2, 3};
  std::transform(now.begin(), now.end(), std::back_insert_iterator<std::vector<int>>(now), std::negate<>());
  std::copy(now.begin(), now.end(), std::ostream_iterator<int> (std::cout, "\n"));
  return 0;
}

And I compile this code, with GCC 6.1.1, option -Wall -std=c++14. The the output of the code was:

1 2 3 -1 -2 -3 1 2 3 -1 0 -3

In my opinion, the 0 in the output should be -2. Am I wrong? If I use the back_insert_iterator wrong, please point it out. Thank you. If not, is this a bug for GCC 6.1.1? Feel free to compile this code on your own computer with different compiler and share your result. Thank you for the help. :)

UPD

I use the iterator wrong, push_back may cause relocation. CLOSED. Thank you again for the help.

  • Проголосовать: нравится
  • -8
  • Проголосовать: не нравится

»
8 лет назад, # |
  Проголосовать: нравится 0 Проголосовать: не нравится

Auto comment: topic has been updated by lyyllyyl (previous revision, new revision, compare).

»
8 лет назад, # |
  Проголосовать: нравится +15 Проголосовать: не нравится

push_back invalidates the iterator.

»
8 лет назад, # |
Rev. 2   Проголосовать: нравится +10 Проголосовать: не нравится

Because you are doing weird [wrong] stuff:

When you append element to deque all others remain unchanged.

But when you append element to vector, vector's memory may be reallocated to become bigger, which usually means, that all elements are moved to other memory region, which means that you are iterating over garbage now.

»
8 лет назад, # |
  Проголосовать: нравится +5 Проголосовать: не нравится

Auto comment: topic has been updated by lyyllyyl (previous revision, new revision, compare).