将向量作为参数传递给函数

时间:2015-06-19 14:53:20

标签: c++ function stl

我有这样的功能:

void Foo(std::vector<bool> Visited, int actual element);

我实际上将此函数用于图形中的BFS,但它进入无限循环。我怀疑它总是会创建一个Visited向量的副本。 如何让它更改向量,在main中的某处声明和初始化?我是对的吗?#34;制作副本&#34;理论?

我如何使用指向对象的指针,因为我认为<vector>是一个对象?

2 个答案:

答案 0 :(得分:3)

通过 参考

传递
void Foo(std::vector<bool>& Visited, int actual element); 
                          ^

现在您可以修改传递给Foo的原始矢量。

  

我对整个“复制”理论是否正确?

是。声明没有&*的参数会将对象通过 =作为副本传递。这同样适用于返回类型等(移动构造函数除外)

答案 1 :(得分:2)

使用引用的类型

void Foo(std::vector<bool> &Visited, int actual element);

否则该函数处理原始向量的副本。

这是一个dempnstrative程序

#include <iostream>
#include <vector>

void f( std::vector<int> &v )
{
    v.assign( { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 } );
}

int main() 
{
    std::vector<int> v;

    f( v );

    for ( int x : v ) std::cout << x << ' ';
    std::cout << std::endl;
}    

程序输出

0 1 2 3 4 5 6 7 8 9