gpt4 book ai didi

c++ - 使用结构按值或引用传递

转载 作者:搜寻专家 更新时间:2023-10-31 01:09:39 25 4
gpt4 key购买 nike

我是 C++ 的新手,我有一个关于通过引用传递元素的问题。我定义了以下结构

struct Point 
{
bool isOnEnvelop;
double x, y;
};

还有下面的函数

vector<Point> convex_hull(vector<Point> P)
{
int n = P.size(), k = 0;
vector<Point> H(2*n);

for (int i = 0; i < n; i++)
{
// IF SOMETHING ....
P[i].isOnEnvelop = true;
H[k] = P[i]
k++
}

H.resize(k-1);
return H;
}

主要如下

main() 
{
vector<Point> P;
// FILL P with Point and set Point.isOnEnvelop = false
vector<Point> H = convex_hull(P);
}

该算法正在构建二维空间中一组点的凸包。我希望能够在循环 P 的元素时能够检测到该点是否在凸包上(因此检查 P.at(i).isOnEnvelop)不幸的是,点的状态在调用函数 convex_hull 后没有改变。我应该通过引用传递参数吗?还是应该将 P 创建为 Point* 的 vector ?

非常感谢您的帮助

文森特

最佳答案

声明 convex_hull 的方式,参数被复制:

vector<Point> convex_hull(vector<Point> P){ ... }

这通常是个坏主意,因为复制 P 可能代价高昂。如果您想确保 P 本身不被修改,另一种方法是使用 const 引用。

如果您在调用函数时修改P(例如在main中有修改,您必须通过引用传递它,并声明convex_hull如下(注意&):

vector<Point> convex_hull(vector<Point> &P){ ... }

关于c++ - 使用结构按值或引用传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16813989/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com