如果我的代碼:如何迭代變量?
T a;
T b;
T c;
// ...
T z;
如何,我可以遍歷它們,而無需創建他們的std::vector<T&>
?
任何漂亮的解決方案,像(僞):
for (auto& it : [a, b, c, d, e, f]) {
// ...
}
(無複印件)
如果我的代碼:如何迭代變量?
T a;
T b;
T c;
// ...
T z;
如何,我可以遍歷它們,而無需創建他們的std::vector<T&>
?
任何漂亮的解決方案,像(僞):
for (auto& it : [a, b, c, d, e, f]) {
// ...
}
(無複印件)
for (auto& var : {std::ref(a), std::ref(b), std::ref(c), std::ref(d), std::ref(e), std::ref(f)}) {
// ...
}
應該做的工作。
是否有任何理由不會簡單地寫'for(auto it:{&a,&b,&c})...' ? –
@ H.Guijt:要有一個更透明的用法(你必須解除引用),但它是一個有效的選擇。 – Jarod42
如果你不想實際修改「變量」,那麼你也許可以做到像
// TODO: Put your own variables here, in the order you want them
auto variables = { a, b, c, .... };
// Concatenate all strings
std::string result = std::accumulate(std::begin(variables), std::end(variables), "",
[](std::string const& first, std::string const& second)
{
return first + ' ' + second; // To add spacing
});
注意,這需要所有的「變量」是同一類型(std::string
)的。如果您有一個不是字符串的變量,您可以使用std::to_string
在第一步中對其進行轉換。
你甚至不能創建'std :: vector'。 –
juanchopanza
一般你不能。您可以創建一個包含變量值*副本的臨時向量。 –
@JoachimPileborg - 這會複製變量,是嗎? –