如何迭代变量?
问题描述:
如果我的代码:如何迭代变量?
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)}) {
// ...
}
应该做的工作。
+1
是否有任何理由不会简单地写'for(auto it:{&a,&b,&c})...' ? –
+0
@ 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 - 这会复制变量,是吗? –