C++:如何正确通过指向的矢量



假设我有一个向量,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));
}

两者之间有什么区别吗?还是有另一种更好的方法可以做到这一点?在我看来,第二个会在每次迭代中取消引用完整的矢量对象以获得单个值,这似乎有点矫枉过正,当然最好只取消引用您想要的内存位置的值?

在这两种情况下,指针都将被取消引用。但是,at执行范围检查,如果失败,则会引发异常,因此第二种方法会更慢。

正确的方法可能如下所示:

void foo(::std::vector<int> & v)
{
for(auto & el: v)
{
bar(el);
}
}

由于您的代码假定指针始终有效,因此没有单一的理由使用它而不是引用。请参阅 CPP 核心指南。

相关内容

  • 没有找到相关文章

最新更新