Есть некоторая структура.
struct Chain{
int x;
int y;
Chain operator+=(int k){
x+=k;
y+=2;
return *this;
}
};
Есть valarray типа Chain
zero = {0,0};
valarray <Chain> bead(zero,size);
Хочется использовать типо такого
bead+=5;
И добиться поведения, которое представлено в структуре. т.е из каждого элемента из bead его x
изменялось на k
, а у
ровно на два
struct Chain {
int x;
int y;
Chain(int k = 0) : x(k), y(0) {}
Chain& operator+=(const Chain& k) {
x += k.x;
y += k.y + 2;
return *this;
}
};
int main() {
Chain zero;
valarray <Chain> bead(zero, 3);
bead += 5; //5 неявно преобразится Chain(5)
for (auto c : bead)
cout << c.x << ' ' << c.y << '\n';
return 0;
}
Оператор +=
должен быть определен для типа, который содержит контейнер (Chain
в вашем случае), поэтому просто передать число не получится.
#include <iostream>
#include <valarray>
struct S
{
int x, y;
S operator += (const S &k)
{
x += k.x;
y += k.y;
return *this;
}
};
void print(const std::valarray <S> &arr)
{
for (const auto &s: arr) {
std::cout << s.x << " " << s.y << "|";
}
std::cout << std::endl;
}
main()
{
std::valarray <S> arr({0, 0}, 3);
print(arr); // 0 0|0 0|0 0|
arr += {3, 2};
print(arr); // 3 2|3 2|3 2|
}
Вы могли бы объявить оператор +=
для типов std::valarray<Chain>
и int
.
Это даст вам возможность делать bead+=5;
#include <algorithm>
#include <iostream>
#include <valarray>
struct Chain{
int x;
int y;
Chain operator+=(int k){
x+=k;
y+=2;
return *this;
}
};
void print_bead(const std::valarray <Chain> & input)
{
for (const Chain & c: input)
{
std::cout << c.x << " " << c.y << " ";
}
std::cout << std::endl;
}
void operator+=(std::valarray<Chain> & arr, const int amount)
{
std::for_each(std::begin(arr), std::end(arr), [amount](Chain & c)
{
c+= amount;
});
}
int main()
{
constexpr std::size_t size = 3;
std::valarray <Chain> bead({0, 0}, size);
print_bead(bead); // 0 0 0 0 0 0
bead += 5;
print_bead(bead); // 5 2 5 2 5 2
bead += 1;
print_bead(bead); // 6 4 6 4 6 4
}
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Я реализовываю свой класс vector, но у меня возникла проблема: как передать в конструктор массив в таком виде: ClassName object = {1, 2, 3, 4, 5};?
Написать программу, печатающую символы от A до введенного с клавиатуры символа (последний возможный: Z)Для каждого символа вывести номер,...
Я начал писать проект с нуля, поэтому я хотел реализовать DependencyInjectionВыбрал Grace, потому что он уже реализован на старом проекте, его писал не я, так...