ФлеймФорумПрограммирование

Насыпьте сложных вопросов по C++ (3 стр)

Страницы: 1 2 3 4 510 Следующая »
#30
13:38, 20 мар 2024

1 frag / 2 deaths
> Но в коде так и делается же.
Нет, не так. Одно дело когда ты перемещаешь юник, который в принципе скопировать нельзя, и другое, когда появляется возможность для копирования какого-нибудь std::string.

З.Ы.
Да и дело в сущности не в этом, а в самой необходимости отвлекаться от текущей работы и тратить его на какие-то бесполезные споры.

#31
13:49, 20 мар 2024

totoro
Подвох в том что можно забыть сделать мув и тогда стринг молча скопируется? Ну &&  поставь в декларации

#32
14:06, 20 мар 2024

totoro
> другое, когда появляется возможность для копирования какого-нибудь std::string

Породить от std::string свой класс(nocopy_string : public std::string), у которого конструктор копирования явно запретить.

#33
14:50, 20 мар 2024

1 frag / 2 deaths
> Ну &&  поставь в декларации
Есть нюансы, как сказал бы роннико - шо твориться?! :)

#34
14:50, 20 мар 2024

totoro
> Да на здоровье, что в этом коде не так?
> https://godbolt.org/z/faq4xoGTv
да, надо помозговать

Aroch
> каждое видео +/- часик, на месяц другой хватит посмотреть
> https://www.youtube.com/@CppCon/videos
спасибо

/A\
> Сравнение signed и unsigned...
Спасибо


pahaa
> - порядок вызова конструкторов/деструкторов при множественном виртуальном/невиртуальном
спасибо

+ Показать
#35
16:33, 20 мар 2024

Aroch
> теперь повесь фильтрацию, с пропуском первых двух элементов и последних 5, с группировкой по 4 штуки.

std::vector<T> grp;
grp.reserve (4);
for (int i = 2, n = vec.size() - 5; i < n; i++)
{
 T item = vec[i]; // или T &, если жаба душид
 if (!filter_predicate(item)) continue;
 grp.push_back(item);
 if (grp.size() >= 4)
 {
  ... // что мы там хотим делать с группой
  grp.clear();
 }
}

Лютой необходимости в итераторах пока по-прежнему не наблюдаю.

#36
16:35, 20 мар 2024

Sbtrn. Devil
> n = vec.size() - 5
Ты забыл что эти дебилы сделали size беззнаковым. Что будет дальше - догадаешься?

#37
17:03, 20 мар 2024

1 frag / 2 deaths
> Что будет дальше - догадаешься?
приведется к int, он же в вычислениях.
Sbtrn. Devil
итого мы получили не эффективную реализацию с копированиями на ровном месте.

сравни с:

namespace vs = std::views;

std::vector<int> data_array = {1,4,6,7,8,3,2,8,9,2,43,10,32,25};
auto filter_func = [](const auto& value) -> bool { return value > 5; };
auto sub_array = std::span(data_array).subspan(
  std::min(2z, std::ssize(data_array)),
  std::max(0z, std::ssize(data_array) - 7z));
    
for(const auto& chunk : sub_array | vs::filter(filter_func) | vs::chunk(4))
{
  for (int pos{}; const auto& value : chunk)
    std::print("{}{}", (pos++ ? ", " : ""), value);
  std::println("");
}
#38
17:05, 20 мар 2024

Aroch
> приведется к int, он же в вычислениях.
А что приведётся?

#39
17:58, 20 мар 2024

1 frag / 2 deaths
> А что приведётся?
vec.size() - 5 результат вычисления будет int и поскольку он присваивается к n который также int то потери знака не будет.

#40
17:59, 20 мар 2024

Aroch
> приведется к int
чё вдруг-то?
uint - uint -> uint

#41
18:00, 20 мар 2024

Aroch
> результат вычисления будет int
результат вычисления будет приведён к int
в конкретно данном случае это overflow и UB
несмотря на то, что реализации всё же делают то, что от них хочется

#42
18:03, 20 мар 2024

pahaa
> uint - uint -> uint
с каких пор 5 это uint? :) Ты путаешь с 5u
> overflow и UB
только если размер вектора будет больше максимального int.

#43
18:06, 20 мар 2024

Aroch
> с каких пор 5 это uint? :) Ты путаешь с 5u
справедливо
тогда всё по-другому
кстати, то, что вот эта математика такая сложная и без 100 грамм не разобраться - это очень плохо, один из реальных недостатков плюсов

#44
18:09, 20 мар 2024

Aroch
> vec.size() - 5 результат вычисления будет int и поскольку он присваивается к n который также int то потери знака не будет.
Да, старший бит будет взведён, согласен, тут ничено не рванёт

Страницы: 1 2 3 4 510 Следующая »
ФлеймФорумПрограммирование

Тема в архиве.