Как вернуть несколько значений из функции?

В C++, функция может возвращать только одно значение. Однако, есть несколько способов вернуть несколько значений из функции.

1. Использование ссылок или указателей в качестве аргументов функции.
Вы можете передать переменные в функцию по ссылке или указателю и изменить их значения внутри функции. Таким образом, функция может модифицировать значения переданных переменных и эти изменения будут видны во внешней области видимости. Пример:

void multipleValues(int& a, int& b) {
    // изменяем значения a и b
    a = 10;
    b = 20;
}

int main() {
    int x = 5, y = 7;
    multipleValues(x, y);
    
    // значения x и y изменились
    cout << "x: " << x << ", y: " << y << endl; // выводит "x: 10, y: 20"
    
    return 0;
}

2. Использование кортежей (std::tuple) или структур.
Вы можете создать кортеж или структуру, содержащую несколько значений, и вернуть его из функции. Это позволяет вернуть несколько значений в виде одного объекта, который может быть распакован при получении значения. Пример:

#include <iostream>
#include <tuple>
using namespace std;

tuple<int, int> multipleValues() {
    int a = 10;
    int b = 20;
    
    return make_tuple(a, b);
}

int main() {
    tuple<int, int> result = multipleValues();
    
    // распаковка значений из кортежа
    int x, y;
    tie(x, y) = result;
    
    cout << "x: " << x << ", y: " << y << endl; // выводит "x: 10, y: 20"
    
    return 0;
}

3. Использование классов и методов доступа.
Вы можете создать класс, содержащий несколько переменных-членов, и вернуть его из функции. Затем вы можете использовать методы доступа (геттеры) для получения значений каждой переменной. Пример:

#include <iostream>
using namespace std;

class MultipleValues {
private:
    int a;
    int b;

public:
    MultipleValues(int a, int b) : a(a), b(b) {}
    
    int getA() { return a; }
    int getB() { return b; }
};

MultipleValues multipleValues() {
    int a = 10;
    int b = 20;
    
    return MultipleValues(a, b);
}

int main() {
    MultipleValues result = multipleValues();
    
    int x = result.getA();
    int y = result.getB();
    
    cout << "x: " << x << ", y: " << y << endl; // выводит "x: 10, y: 20"
    
    return 0;
}

Это лишь некоторые из способов вернуть несколько значений из функции в C++. Какой способ выбрать зависит от ваших потребностей и предпочтений.