【发布时间】:2021-03-11 13:18:50
【问题描述】:
我对 C++ 很陌生,现在边做边学。在课堂材料中,我有以下功能:
std::vector<std::complex<double>> material::get_idx(const std::vector<double>& numbers) {
std::vector<std::complex<double>> res;
for (auto& num : numbers) {
// calculate with num (we don't modify it) and push_back to res
...
}
return res;
}
几分钟前,我使用了这样的普通 for 循环:for(size_t i=0; i<numbers.size(); i++)。因为我已经读到使用基于范围的 for 循环和 auto 比普通的 for 循环更有效,所以我改变了它。现在我问自己,用这样的参考编写基于范围的 for 循环是否正确/有意义/良好的做法:for(auto& num : numbers) 以及使用for(auto num : numbers) 的区别是什么。我有点困惑,因为我已经在 get_idx 函数的签名中交付了每个引用的数字向量。当然,我想将每个引用的向量编号交给函数 get_idx,但是如何通过引用循环这些元素呢?
【问题讨论】:
-
我的建议,
const auto&如果你不想修改,auto&&如果你想修改。 -
嘿@NathanOliver,感谢您的回答,使用 const auto& 而不是仅使用 const auto 有什么区别?
-
第一个是参考,所以没有复制。第二个是一个值,因此制作了一个副本。复制可能很昂贵。
-
在 C++ 中学习的新东西永远不会用完,尽管我并不总是确定这是否是一件好事 ;)
-
好吧,至少确保这里的人们能够自愿解释事情是一件好事。再次感谢,祝大家有美好的一天!
标签: c++ loops for-loop reference