История изменений
Исправление Kroz, (текущая версия) :
В case 1 была показана работа простыми операторами со сложным типом - строкой. На самом деле ты такое можешь конструировать для любого типа. Для стандартных типов это скорее вред, чем польза, а вот для своих кастомных типов может существенно облегчить чтение кода.
Внизу примеры чуть неправильные (я ж говорил, что лучше этого не делать для стандартных типов), но отражают суть.
Еще в примера показана работа с массивами. Опять же - все динамически выделяется и высвобождается, вся работа с памятьью организована стандартной библиотекой.
Пример 1: «плюс» означает конкатенацию массивов:
#include <iostream>
#include <vector>
using namespace std;
vector<int> operator+(vector<int> &a, vector<int> &b)
{
vector<int> r(a);
r.insert(r.end(), b.begin(), b.end());
return r;
}
int main()
{
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
vector<int> v3;
v3 = v1 + v2;
cout << "Vector content: ";
for (auto e: v3)
cout << e << " ";
cout << endl;
return 0;
}
$ g++ ./cpp_vector_merge.cpp && ./a.out
Vector content: 1 2 3 4 5 6
Пример 2: «плюс» означает сумму элементов массивов:
#include <iostream>
#include <vector>
using namespace std;
vector<int> operator+(vector<int> &a, vector<int> &b)
{
vector<int> r;
auto i_b = b.begin();
for (auto e_a: a)
if (i_b != b.end())
r.push_back(e_a + *i_b);
return r;
}
int main()
{
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
vector<int> v3;
v3 = v1 + v2;
cout << "Vector content: ";
for (auto e: v3)
cout << e << " ";
cout << endl;
return 0;
}
$ g++ ./cpp_vector_add.cpp && ./a.out
Vector content: Vector content: 5 6 7
Исходная версия Kroz, :
Case 2: Перегрузка операторов
В case 1 была показана работа простыми операторами со сложным типом - строкой. На самом деле ты такое можешь конструировать для любого типа. Для стандартных типов это скорее вред, чем польза, а вот для своих кастомных типов может существенно облегчить чтение кода.
Внизу примеры чуть неправильные (я ж говорил, что лучше этого не делать для стандартных типов), но отражают суть.
Еще в примера показана работа с массивами. Опять же - все динамически выделяется и высвобождается, вся работа с памятьью организована стандартной библиотекой.
Пример 1: «плюс» означает конкатенацию массивов:
#include <iostream>
#include <vector>
using namespace std;
vector<int> operator+(vector<int> &a, vector<int> &b)
{
vector<int> r(a);
r.insert(r.end(), b.begin(), b.end());
return r;
}
int main()
{
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
vector<int> v3;
v3 = v1 + v2;
cout << "Vector content: ";
for (auto e: v3)
cout << e << " ";
cout << endl;
return 0;
}
Пример 2: «плюс» означает сумму элементов массивов:
#include <iostream>
#include <vector>
using namespace std;
vector<int> operator+(vector<int> &a, vector<int> &b)
{
vector<int> r;
auto i_b = b.begin();
for (auto e_a: a)
if (i_b != b.end())
r.push_back(e_a + *i_b);
return r;
}
int main()
{
vector<int> v1 = {1, 2, 3};
vector<int> v2 = {4, 5, 6};
vector<int> v3;
v3 = v1 + v2;
cout << "Vector content: ";
for (auto e: v3)
cout << e << " ";
cout << endl;
return 0;
}