我有这样的功能:
void Foo(std::vector<bool> Visited, int actual element);
我实际上将此函数用于图形中的BFS,但它进入无限循环。我怀疑它总是会创建一个Visited向量的副本。 如何让它更改向量,在main中的某处声明和初始化?我是对的吗?#34;制作副本&#34;理论?
我如何使用指向对象的指针,因为我认为<vector>
是一个对象?
答案 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