Перегрузить оператор &
Определить операцию над векторами: & формирование нового вектора так, что каждый элемент нового вектора определяется следующим образом:c[i] = (a[i] > b[i]) ? a[i]: b[i].
В общем, как я понял нужно, чтобы при выполнении vector3 = vector1 & vector2, в vector 3 находились наибольшие значение массива. Например, если vector1 = [1,2,3], а vector2 = [4,0,1], то vector3 должен содержать [4,2,3].
Я додумался до такой реализации, но, если я здесь, понятно, что у меня не получилось:
Vector& Vector::operator&(const Vector& obj)
{
if (vectorSize = obj.vectorSize)
{
this->ptrArr = new int[vectorSize];
for (int i = 0; i < vectorSize; i++)
{
if (this->ptrArr[i] > obj.ptrArr[i])
{
return *this;
}
else
{
continue;
}
}
}
}
Наставьте на путь истинный кому не сложно.
Что будет если размеры массивов не равны я просто не дописал, это не сильно к делу относится.
Реализация массива
void Vector::SetVector() { srand(time(NULL)); for (int i = 0; i < vectorSize; i++) { ptrArr[i] = rand() % 1000; Sleep(500); }Вобщем, создаётся три рандомно заполненных массива, и, как я выше написал, нужно, чтобы в третьем были наибольшие значения из первых двух. Для реализации этого нужно перегрузить знак &.
Ответы (1 шт):
Поскольку у вас ничего не сказано о внутреннем представлении Vector, приходится только гадать о нем. Так что я покажу, как бы я делал для
using Vector = vector<int>;
Это был бы не член класса, а свободная функция:
Vector operator&(const Vector& a, const Vector& b)
{
if (a.size() != b.size()) throw runtime_error("a.size() != b.size()");
Vector c(a.size());
for(int i = 0; i < a.size(); ++i)
c[i] = a[i] > b[i] ? a[i] : b[i];
return c;
}
Вот полная программа - https://ideone.com/RsL4rf
Ну, а вы уж попробуйте переписать для своего вектора...