gpt4 book ai didi

c++ - 用 vector 编写算法的问题

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:48:37 24 4
gpt4 key购买 nike

-(void)userShow{
vector<CGPoint>::iterator it;
vector<CGPoint>* xp = x.graphPoints;
vector<CGPoint>* yp = y.graphPoints;
xVal = new vector<double>();
yVal = new vector<double>();
xyVal = new vector<double>();
xxVal = new vector<double>();
value = new vector<double>();
c = new vector<double>();


for(it = xp->begin(); it != xp->end(); ++it){
xVal->push_back(it->y);
xxVal->push_back(it->x);

}
for(it = yp->begin(); it != yp->end(); ++it){
xyVal->push_back(it->x);
}

for (int i = 0; i < xVal->size(); i++){
c = xVal[i];
while (xyVal[c] < xxVal[i];){
c++;
if ((c-1)<=xxVal[i]<=c){
double value = xp[c-1] + (xp[c] - yp[c-1])*(xxVal[i] - xyVal[c-1])/(xyVal[c] - xyVal[c-1]);
}
yVal->push_back(value);
}
}

UserGraph->removeAllData();
UserGraph->addDataSet(xVal, yVal, [UIColor redColor], 0, false, true, 2);
UserGraph->updateAll();
}

以上是我希望发生的事情的伪代码。我仍然无法理解 vector 。正如您在上面看到的 yVal = "..."vector<CGPoint> 的二进制表达式存在问题和 vector<double> .

这个算法应该做的是在两个图上画一条线 x(t)y(t)然后捕获 x(t)y坐标并将其变成一个新的 vector 。在那之后的第二个 while 中,它需要 x(t)xy(t) 进行比较的坐标x抢坐标 y坐标。当x(t)的 x 和 y(t) x不匹配需要执行 yVal =算法。

有人能帮我把我的伪代码变成工作代码吗?干杯

最佳答案

您的代码中有一些谜团,但希望像这样的东西能让您入门。我取消了对 vector 的指针的使用,并在行中添加了一些注释来解释我的更改。

void userShow() {

// I assume that x.graphPoints is just some `std::vector<CGPoint>` and you just want to use it locally

// if x.graphPoints returns an "std::vector<CGPoint> *" (pointer-to-vector),
// you should probably modify the class/struct/whatever to just use the vector,
// not a pointer-to-vector
vector<CGPoint>& xp = x.graphPoints;

// ditto for y.graphPoints
vector<CGPoint>& yp = y.graphPoints;

// You almost never use pointers to containers, nor allocate them with new -
// it's an atypical practice in C++
/*
xVal = new vector<double>();
yVal = new vector<double>();
xyVal = new vector<double>();
*/

// instead just create the vectors on the stack
std::vector<double> xVal, yVal, xyVal;

std::vector<CGPoint>::iterator it;

// These have been changed to not use -> member notation, since we're not
// using pointers anymore
for(it = xp.begin(); it != xp.end(); ++it){
xVal.push_back(it->y);
xxVal.push_back(it->x); // I have no idea what xxVal is? I think it's xyVal?
// xyVal.push_back(it->x); // like this?
}

// you can iterate through a vector with this type of loop, or
// use an iterator as above
for (int i = 0; i < xp.size(); ++i){
int c = 1;
while (xyVal[c] < xxVal[i]) {
++c;

// (c-1)<=xxVal[i]<=c; // ???

// I think the previous line means...c gets the value of xyVal[i], and
// xxVal gets c-1? You'll have to explain this, otherwise it it just a
// free-standing conditional comparison

// EDIT: I think I understand what you mean
// this was a conditional check to do the yVal stuff
/**
if ( (c-1) <= xxVal[i] && xxVal[i] <= c) {
// yVal = xp[c-1] + (xp[c] - yp[c-1])*(xxVal[i]-xyVal[c-1])/(xyVal[c] - xyVal[c-1]);
} */

// as mentioned, yVal is a vector, so what do you want?
yVal = xp[c-1] + (xp[c] - yp[c-1])*(xxVal[i]-xyVal[c-1])/(xyVal[c] - xyVal[c-1]);

}
}
}

关于c++ - 用 vector 编写算法的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7824476/

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