我最近去面试一个程序工作,他们让我写一些函数,它将一个向量和一个整数作为参数。任务是计算向量中大于、小于或等于整数的元素数量。我沿着这些思路写了一些东西:
void printStat(const std::vector<int> &vec, const int &val)
{
int results[3] = {0,0,0};
for (int i = 0; i < vec.size(); ++i) {
int option = (vec[i] == val) ? 0 : ((vec[i] > val) ? 1 : 2);
results[option]++;
}
...
}
他们对我认为可疑的代码发表了一些评论,我想知道 C++ 专家的意见。他们说传递vec
和val
引用的效率低于价值。最好这样写:
void printStat(const std::vector<int> vec, const int val) {}
老实说,我一直使用第一个版本(在顶部)编写我的代码,并且没有真正的论据来解释为什么我的方法会比他们的更好或没有什么不同。他们的论点是,通过引用传递参数会迫使稍后在您想要其内容时取消对变量的引用,这比我通过值传递变量时要慢。
所以我的问题是:最好的方法是什么,原因是什么?
奖励问题:他们还认为,在循环中使用迭代器会比使用[]
运算符访问向量的元素更有效。我看不出有任何原因,特别是因为我怀疑vec[i]
在第 5 行访问两次时它会在 L1 缓存中。
谢谢你。