我一直在嘗試找到一種從函式回傳 2 個值的簡單方法,并在網上發現創建一個結構來存盤這些值是最簡單的方法。現在我已經撰寫了結構和函式,但我不知道如何實際列印結構。我在網上看到了很多關于這個的帖子,但我不明白他們的答案。任何人都可以向我解釋如何在不使用任何技術術語(無需解釋)的情況下修復我的代碼。最好用一些關于該主題的研究材料來添加/修改我當前的代碼。我根本沒有編碼經驗,也沒有以編碼為中心的教育。我只是在業余時間做這件事以獲得一點樂趣。
#include <iostream>
#include <cmath>
struct values {
float value1;
float value2;
};
values quadratic(int a, int b, int c) {
float d = sqrt(b*b - 4*a*c);
float x1 = (-b d)/2*a;
float x2 = (-b - d)/2*a;
values result = {x1, x2};
return result;
};
int main() {
std::cout << quadratic(1, 2, -1);
};
uj5u.com熱心網友回復:
至少有三種方法可以做到這一點。
方法一:獲取struct結果并列印
這是最簡單的解決方案。
int main() {
values vs = quadratic(1, 2, -1);
std::cout << vs.value1 << ", " << vs.value2 << "\n";
}
方法 2:使用自動結構化系結
這至少需要 C 17(我認為,無論如何你都不應該使用更少的東西):
int main() {
auto [a, b] = quadratic(1, 2, -1);
std::cout << a << ", " << b << "\n";
}
它比方法 1 更漂亮,但基本相同。
方法三:多載流插入運算子
這是您的問題被標記為重復并鏈接到這樣做的地方:
std::ostream & operator << (std::ostream & outs, const values & vs) {
return outs << vs.value1 << ", " << vs.value2;
}
int main() {
std::cout << quadratic(1, 2, -1) << "\n";
}
這可能是呼叫站點上最漂亮的,但確實需要您的values結構可轉換為字串(這是多載<<運算子所做的)。
方法 4:回傳元組而不是自定義結構
這基本上是 2 的重新散列。
#include <cmath>
#include <iostream>
#include <tuple>
std::tuple <float, float> quadratic(int a, int b, int c) {
float d = sqrt(b*b - 4*a*c);
float x1 = (-b d)/2*a;
float x2 = (-b - d)/2*a;
return std::make_tuple(x1, x2);
};
int main() {
auto [a, b] = quadratic(1, 2, -1);
std::cout << a << ", " << b << "\n";
};
這就是我要打擾的所有內容,但我認為它涵蓋了所有基礎。
編輯:修復了我寫的愚蠢的東西
uj5u.com熱心網友回復:
一種常見的方法是多載operator<<. 有關詳細資訊,請參閱此問題。
struct values {
friend std::ostream& operator<<(std::ostream&, const values&);
float value1;
float value2;
};
std::ostream& operator<<(std::ostream& os, const values& v) {
return os << v.value1 << ", " << v.value2;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/419343.html
標籤:
