将向量作为参数传递给函数
Passing a vector as argument to function
我有一个这样的函数:
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
相关文章:
- 如何在C++中将迭代器作为函数参数传递
- 为什么我不能将引用作为 std::async 的函数参数传递
- 节点插件 API 将数组作为函数参数传递
- 将字符串数组作为函数参数传递
- 如何通过 C++ 中的函数参数传递初始值设定项列表的固定大小的初始值设定项列表?
- 我可以动态创建新地图并作为函数参数传递吗?
- 将任意模板向量作为函数参数C++传递
- 将函数指针作为函数参数传递的目的
- C++:通过函数参数传递的值给出不同的结果
- 当数组大小在C++中未知时,如何在运行时将对字符串数组的引用作为函数参数传递?
- 通过宏将函数参数传递给函数
- C++:访问作为函数参数传递的双指针数组所指向的变量的值
- 如何将 std::string 作为构造函数参数传递,并将其保存的 C 字符串存储在 void 指针中?
- 将派生类构造函数参数传递给受保护的成员
- 将指向数组的指针作为函数参数传递,这本身就是另一个函数的返回值?
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 如何将派生类作为函数参数传递:如果派生类成员不在父类中怎么办
- 如何将变量作为构造函数参数或函数参数传递
- 当数组对象以函数参数传递时,为什么复制构造函数会自称