繁体   English   中英

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

[英]Passing a vector as argument to function

我有一个这样的功能:

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

实际上,我将此功能用于Graph中的BFS,但它处于无限循环中。 我怀疑它总是创建Visited向量的副本。 如何使它更改向量,该向量在main中的某个位置进行了声明和初始化? 我对整个“复制”理论是否正确?

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

通过引用传递它:

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

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

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

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

使用引用的类型

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

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

这是一个演示程序

#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 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM