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

Passing a vector as argument to function

本文关键字:函数 参数传递 向量      更新时间:2023-10-16

我有一个这样的函数:

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

我实际上将这个函数用于图形中的 BFS,但它处于无限循环中。我怀疑它总是创建访问过的矢量的副本。如何让它更改在 main 某处声明和初始化的向量?我对整个"复制"理论是对的吗?

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

通过引用传递它:

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

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

我对整个"复制"理论是对的吗?

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

使用引用的类型

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