代码之家  ›  专栏  ›  技术社区  ›  storluffarn

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

  •  1
  • storluffarn  · 技术社区  · 7 年前

    假设我有一个向量, ,

    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));
    }
    

    这两者有什么不同吗?还是有其他更好的方法?在我看来,第二种方法每次迭代都会取消对全向量对象的引用,以获得一个值,这似乎有点过头了,当然最好只取消对所需内存位置处的值的引用?

    1 回复  |  直到 7 年前
        1
  •  1
  •   user7860670    7 年前

    在这两种情况下,指针都将被解引用。然而 at 执行范围检查,并在失败时引发异常,因此第二种方法会更慢。

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

    由于您的代码假设指针始终有效,因此没有任何理由使用它而不是引用。 See Cpp Core Guidelines .