ulidtko 10.10.2011 01:27 dedicated microblogging account

Казалось бы, что может быть приятнее и натуральнее, чем сделать #include <algorithm> и написать:

vector<int> parking_prices(num_parking_places);
istream_iterator<int> it(std::cin);
std::copy(it, it + num_parking_places, parking_prices.begin());

А вот хуй.
error: no match for ‘operator+’ in ‘it + num_parking_places’

Плюсовая стдлибка в очередной раз кромсает мне сердце своей ледяной неприступностью. Остаётся только безнадёжно плюнуть, и переписать с for(int i = 0.

Recommended by: @DZhon, @dorfe
1. DZhon 10.10.2011 04:19

Патамушта istream iterator всего лишь итератор ввода (который меньше всех умеет, наряду с итератором вывода). Ты хочешь от него поведения FwdIterator. Зделой std::advance.

2. DZhonDZhon /1 10.10.2011 04:21

Даже не Fwd, а Random Access, да.

3. DZhon 10.10.2011 04:28

В C++11, кстати, появился std::copy_n, который был в SGI STL.

4. 0xd34df00d 10.10.2011 06:48 Azoth_primary

std::advance.

5. DZhon0xd34df00d /4 10.10.2011 07:00

:3

6. ulidtkoDZhon /1 10.10.2011 12:44 dedicated microblogging account

а после advance я смогу ещё прочитать пропущенные итемы из istream-а?

7. ulidtko0xd34df00d /4 10.10.2011 12:49

отвечай на мой ответ!

8. DZhonulidtko /6 10.10.2011 13:07

Ты должен делать advance на копии итератора, в любом случае. А чтобы прочитать пропущенные, читай из итератора-оригинала.

А лучше не еби моцк и юзай std::copy_n, если у тебя MSVS2010 или gcc с 0x (какой версии нада — хз)

9. DZhonDZhon /8 10.10.2011 13:16

кстати, std::advance позволяет на основе тега итератора выбрать наиболее оптимальный способ сдвига. Если Random Access, то напрямую прибавит, если Fwd, то сделает n раз ++.
Такие дела.

10. 0xd34df00dulidtko /6 10.10.2011 13:19 Azoth_primary

Зависит. А ваще /8 хорошо. да.

11. 0xd34df00dDZhon /9 10.10.2011 13:19 Azoth_primary

SUDDENLY :3

12. DZhon0xd34df00d /11 10.10.2011 13:20

Да я ж не тебе, епт :3

13. DZhon 10.10.2011 13:31

Кхм, кажется, это не работает. В момент создания копии итератор сдвигается. И все изменения копии касаются и оригинала, поскольку они шарят поток и никак не захватывают его состояния или буферы. Говно.
0xd34df00d: попробуй ? Если заработает, покажи кот.

14. DZhonDZhon /13 10.10.2011 13:32

Я про возврат к пропущенным значениям, в смысле.

15. ulidtkoDZhon /8 10.10.2011 13:38

литераторы инвалидируются при мутациях же.

16. ulidtkoulidtko /15 10.10.2011 13:39

литераторы, лол. *итераторы, God bless IME.

17. 0xd34df00d 10.10.2011 13:40 Azoth_primary

Этот тред нуждается в http://img-fotki.yandex.ru/get/4008/phob...

18. DZhonulidtko /15 10.10.2011 13:52

InputIterator-ы только, да. Остальные вполне ок такое зделоют.

19. DZhon0xd34df00d /17 10.10.2011 13:53

ТЫ В АРМИИ СЫНОК ?

20. dorfe 10.10.2011 14:01

>стдлибка

Сразу виндо что ты идиот и не видишь разницы между ненужной стл и божественной стдлибкой.

21. ulidtkodorfe /20 10.10.2011 15:01

ну-ка быстро съебал, пидарок.

23. dorfeulidtko /21 10.10.2011 18:23

дохуя натурал?

24. ulidtko 12.10.2011 10:51

error: ‘copy_n’ is not a member of ‘std’

Печалька, посоны.

25. DZhonulidtko /24 12.10.2011 11:54

гоцаце штоле ?

26. ulidtkoDZhon /25 12.10.2011 12:02 dedicated microblogging account

а то!

Do you really want to delete ?