【发布时间】:2017-08-21 20:13:41
【问题描述】:
假设我有一个向量,v,
vector <int> v = {0,1,2,...n};
在函数中以指向 v 的指针作为参数循环遍历 v 的正确方法是什么?我可以看到两种方法,使用 (*) 或使用 .at() 成员取消引用向量:
void foo(vector <int>* v)
{
for (auto& el : (*v))
bar(el);
}
或
void foo(vector <int>* v)
{
for (int k = 0; k < n; k++)
bar(v->at(k));
}
这两者有什么区别吗?还是有另一种更好的方法来做到这一点?在我看来,第二个会在每次迭代时取消引用完整的向量对象以获得单个值,这似乎有点过头了,当然最好只在你想要的内存位置取消引用值?
【问题讨论】:
-
您是否考虑过改用
void foo(std::vector<int> &v)? -
这至少是c++11,不是吗?
-
如果你要改变vector然后通过引用传递,如果不是那么通过引用传递给const。
-
@Yunnosch 如果他尝试使用带有该循环语法的
auto,一定是这样。 -
@nwp,不,我没有,不知道它存在,见下文。 Yunnosch,是的,是的。罗恩,这是一个很好的建议,我从来没有意识到你可以以一种有意义的方式在两者之间进行交流。
标签: c++ loops pointers vector dereference