Size: a a a

2020 April 13

d

dukomok in pro.cxx
!
источник

d

dukomok in pro.cxx
просто как дальше по ней заниматься если ошибки, сыкотно как то
источник

AT

Anatoly Tomilov in pro.cxx
Насколько это легально (помечено !)? https://wandbox.org/permlink/Wf3R1VhIAzyWaRkZ
источник

AD

Andrey Davydov in pro.cxx
источник

IS

Iskander Saitbatalov in pro.cxx
dukomok
Template Type Parameters
Our compare function has one template type parameter. In general, we can use
a type parameter as a type specifier in the same way that we use a built-in or
class type specifier. In particular, a type parameter can be used to name the return
type or a function parameter type, and for variable declarations or casts inside the
function body:
// ok: same type used for the return type and parameter
template <typename T> T foo(T* p)
{
T tmp = *p; // tmp will have the type to which p points
// . . .
return tmp;
}
Each type parameter must be preceded by the keyword class or typename:
// error: must precede U with either typename or class
template <typename T, U> T calc(const T&, const U&);
These keywords have the same meaning and can be used interchangeably inside a
template parameter list. A template parameter list can use both keywords:
// ok: no distinction between typename and class in a template parameter list
template <typename T, class U> calc (const T&, const U&);
It may seem more intuitive to use the keyword typename rather than class
to designate a template type parameter. After all, we can use built-in (nonclass)
types as a template type argument. Moreover, typename more clearly indicates
that the name that follows is a type name. However, typename was added to C++
after templates were already in widespread use; some programmers continue to
use class exclusively.
Это несущественная ошибка, которая может встречаться в любом, даже самом высококвалифицированном, учебнике. Приведите, пожалуйста, пример с
template <typename T> T foo(T* p)
, который у вас не работает, желательно через платформу godbolt.org. Мне интересно посмотреть, с какой такой проблемой вы столкнулись при инстанциировании подобного шаблона (первое что приходит в голову - это non-copyable классы).
источник

AT

Anatoly Tomilov in pro.cxx
Andrey Davydov
а какой именно пункт?
источник

AD

Andrey Davydov in pro.cxx
Anatoly Tomilov
а какой именно пункт?
выделенный note
источник

AT

Anatoly Tomilov in pro.cxx
что интересно этим ограничением решается?
источник

РБ

Руслан Багров in pro.cxx
Добрый вечер! Кто-нибудь работал с Intel IPP или MKL?
источник
2020 April 14

A

Alex in pro.cxx
с reverse_iterator одни баги. Точно нет в std способа найти первый элемент с конца в нормальном прямом range?
источник

AS

Anatoly Shirokov in pro.cxx
Alex
с reverse_iterator одни баги. Точно нет в std способа найти первый элемент с конца в нормальном прямом range?
А с чем проблема? Нашел через reverse, вызови base у реверс итератора.
источник

A

Alex in pro.cxx
А вот с чем:
const auto it1 = std::find(begin, end, value);
assert(std::find(std::make_reverse_iterator(begin), std::make_reverse_iterator(end), value).base() == it1);

В range один элемент со значением value, прямой find его успешно нашёл, а assert фэйлится.
источник

A

Alex in pro.cxx
Хотя код бредовый, мне нет необходимости искать именно с обратной стороны, достаточно поискать вперёд от it1 + 1. Но я всё равно не понял, что здесь не так было.
источник

AS

Anatoly Shirokov in pro.cxx
Alex
Хотя код бредовый, мне нет необходимости искать именно с обратной стороны, достаточно поискать вперёд от it1 + 1. Но я всё равно не понял, что здесь не так было.
источник

ИI

И Ivan in pro.cxx
С reverse_iterator нужно всегда помнить, куда +-1 засунуть к итератору
источник

AT

Anatoly Tomilov in pro.cxx
Ничего не надо засовывать. У чувака с непониманием баги.
источник

AT

Anatoly Tomilov in pro.cxx
Alex
А вот с чем:
const auto it1 = std::find(begin, end, value);
assert(std::find(std::make_reverse_iterator(begin), std::make_reverse_iterator(end), value).base() == it1);

В range один элемент со значением value, прямой find его успешно нашёл, а assert фэйлится.
ты понимаешь, что std::make_reverse_iterator(begin) > std::make_reverse_iterator(end) в том смысле, что после нескольких инкрементов std::make_reverse_iterator(end) у тебя получится std::make_reverse_iterator(begin)?
источник

A

Alex in pro.cxx
Anatoly Tomilov
ты понимаешь, что std::make_reverse_iterator(begin) > std::make_reverse_iterator(end) в том смысле, что после нескольких инкрементов std::make_reverse_iterator(end) у тебя получится std::make_reverse_iterator(begin)?
то есть, мне нужно было написать find(std::make_reverse_iterator(end), std::make_reverse_iterator(begin))?
источник

AT

Anatoly Tomilov in pro.cxx
конечно
источник

A

Alex in pro.cxx
блин) теперь понятно, спс
источник