- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
for(const auto & row : table; const auto & element : row) {
handle(element);
}
// versus
for(const auto & row : table) {
for(const auto & element : row) {
handle(element);
}
}
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+129
for(const auto & row : table; const auto & element : row) {
handle(element);
}
// versus
for(const auto & row : table) {
for(const auto & element : row) {
handle(element);
}
}
Всякого ненужного говна в новые крестостандарты насовали, а о простых вещах не подумали. Ну ведь удобней же было бы!
Но не-ет, нам нужна функциональщина в крестах, ведь нам мало мозгоклюйства с другими языками; а давайте засунем в стандартную библиотеку либкайро, чтобы разработчики стандартных библиотек соревновались, кто быстрее запилит частичную поддержку в 95% случаев ненужной либы полутра операционными системами, куда-ах-тах-тах!
Забавно, только что узнал, что в vs2013 есть шорткат ^ko, который переключает между заголовком и реализацией. ^ko^ko^ko
Elvenfighter 31.03.2015 01:15 # +6
Xom94ok 31.03.2015 06:11 # +6
roman-kashitsyn 31.03.2015 10:22 # +3
Если уж очень хочется, то можно как-то так:
Нужно только написать функцию flatten, которая берёт range однотипных range-й и превращает их в один плоский range.
guest 31.03.2015 18:50 # 0
roman-kashitsyn 31.03.2015 18:58 # 0
guest 31.03.2015 19:22 # 0
roman-kashitsyn 31.03.2015 19:58 # 0
guest 31.03.2015 20:00 # 0
roman-kashitsyn 31.03.2015 20:02 # +1
guest 31.03.2015 20:04 # 0
Если что хочется?
roman-kashitsyn 31.03.2015 20:11 # 0
guest 31.03.2015 20:17 # 0
roman-kashitsyn 31.03.2015 20:27 # 0
guest 31.03.2015 20:30 # 0
for(const auto & row : table) {
for(const auto & element : row) {
handle(element);
}
}
Это - аналог продукта
roman-kashitsyn 31.03.2015 20:32 # 0
guest 31.03.2015 20:40 # 0
Да, product тут не подойдет, но chain - это как сложение списков
edit: ах, тут звездочка: itertools.chain(*table). Тогда да. Правда, с тремя и больше степенями вложенности получится говно
roman-kashitsyn 31.03.2015 20:42 # 0
И? Твой код не эквивалентен
?
guest 31.03.2015 20:47 # 0
rss 02.01.2020 14:58 # 0
Xom94ok 31.03.2015 22:19 # +1
Ну, вполне себе кандидат в буст, если там такого ещё нет*. Правда, для случая с двумя не связанными последовательностями потребуется хитрый cross join.
*(нужен мне был как-то враппер для контейнера, который поменяет прямые итераторы на обратные, и в бустах такой как раз нашелся :)
roman-kashitsyn 01.04.2015 12:18 # +1
Шаблон для произвольного числа range-й тоже реален при использовании variadic templates, но написать будет уже посложнее.
Вообще говоря, я бы писал тупые циклы и не выпендривался.
PS. В языках с list comprehensions это всё есть из коробки:
Python: [y for x in table for y in x]
Haskell: [y | x <- table, y <- x]
kegdan 01.04.2015 12:44 # 0
из коробки
login-da 05.04.2015 01:22 # +1
Там и flatten (view::join), можно, и объединение (view::concat) range-й есть.
HoBorogHuu_nemyx 02.01.2020 14:43 # +1
absolut 31.03.2015 21:34 # 0
Xom94ok 31.03.2015 22:36 # 0
Нет такого расширения, сей пост - порождение моего мозга.
guest 31.03.2015 22:40 # 0
Xom94ok 31.03.2015 22:48 # 0
Завидую @idkravitz, с нынешним курсом банка сгущенки - это практически целое состояние. Эх.
AnalBoy 02.01.2020 21:46 # 0
bormand 31.03.2015 22:40 # +2
Xom94ok 31.03.2015 22:45 # 0
guest 31.03.2015 22:50 # +5
AnalBoy 02.01.2020 21:45 # 0
rss 02.01.2020 14:59 # +1
rss 02.01.2020 15:06 # 0
rss 02.01.2020 15:11 # 0
rss 02.01.2020 15:12 # 0
rss 02.01.2020 15:16 # 0
rss 02.01.2020 15:17 # 0
rss 02.01.2020 15:17 # 0