квадрат и целые, и вещественные, и контейнеры целых или вещественных,
определил вот такой шаблон
template <typename T>
T Sqr(T x) {
return x * x;
}
начал с обработки вектора и вот так перегрузил оператор *, чтобы возводить каждый элемент вектора в квадрат
template<typename Type>
vector<Type> operator*(const vector<Type>& v) {
vector<Type> sqr_v;
for (int i = 0; i < v.size(); ++i) {
sqr_v.push_back(v[i] * v[i]);
}
return sqr_v;
}
но это не работает, где может быть ошибка и в какую сторону лучше копать?
нагуглить чего то не получилось
Так а что за ошибка?
работает) но выглядит прям очень сомнительно
Не нужно перегружать operator*, если задачка на шаблоны
Ошибка C2676 бинарный "*": "T" не определяет этот оператор или преобразование к типу приемлемо к встроенному оператору FunctionsTemplates
sqr это вообще квадратный корень
sqrt вроде
square root
в разных языках по разному такая функция может обзываться, но семантика одна тем не менее)
а иначе же просто шаблонная функция не будет знать, как обработать вектор, если получит его
Потому что задача - "написать функцию для возведения в квадрат", а не "переопределить оператор для стандартных контейнеров"
Вот в этом, видимо, и задача
задача - написать универсальную функцию, которая работает со всеми типами, которые я выше описал
И для этого не нужно перегружать operator*
либо перегружайте функцию для примитивов и контейнеров
Так оператор зачем? возможно, будет лучше что-то вроде template<class T> vector<T> pow(const vector<T>&, size_t n)
принял, спасибо большое!
Вообще, кстати, если вы планируете итерироваться только по стандартным контейнерам, вы можете шаблон не на тип контейнера накладывать, а на сам контейнер template<class Container> Container pow(const Container&, size_t n)
так и написал, спасибо
Обсуждают сегодня