C++ 用向量编写算法的问题 -(void)userShow{ 向量::迭代器; 向量*xp=x.graphPoints; 向量*yp=y.图点; xVal=新向量(); yVal=新向量(); xyVal=新向量(); xxVal=新向量(); 值=新向量(); c=新向量(); 对于(it=xp->begin();it!=xp->end();++it){ xVal->推回(it->y); xxVal->推回(it->x); } 对于(it=yp->begin();it!=yp->end();++it){ xyVal->push_back(it->x); } 对于(inti=0;isize();i++){ c=xVal[i]; while(xyVal[c]addDataSet(xVal,yVal,[UIColor redColor],0,false,true,2); UserGraph->updateAll(); }

C++ 用向量编写算法的问题 -(void)userShow{ 向量::迭代器; 向量*xp=x.graphPoints; 向量*yp=y.图点; xVal=新向量(); yVal=新向量(); xyVal=新向量(); xxVal=新向量(); 值=新向量(); c=新向量(); 对于(it=xp->begin();it!=xp->end();++it){ xVal->推回(it->y); xxVal->推回(it->x); } 对于(it=yp->begin();it!=yp->end();++it){ xyVal->push_back(it->x); } 对于(inti=0;isize();i++){ c=xVal[i]; while(xyVal[c]addDataSet(xVal,yVal,[UIColor redColor],0,false,true,2); UserGraph->updateAll(); },c++,algorithm,vector,C++,Algorithm,Vector,上面是我想要实现的伪代码。我在理解向量方面仍然存在问题。正如上面的yVal=“…”所示,使用vector和vector的二进制表达式存在问题 该算法要做的是在两个图x(t)和y(t)上画一条线,然后抓住x(t)的y坐标,并将其转换为一个新的向量。在第二个过程中,它将x(t)坐标与y(t)进行比较x协调抓取y协调。当x(t)的x和y(t)x不匹配时,需要执行yVal=算法 有人能帮我把伪代码变成工作代码吗?干杯 yVal是一个指向双精度向量的点(顺便说一句,你几乎肯定不会使用它),而不是一个值yV

上面是我想要实现的伪代码。我在理解向量方面仍然存在问题。正如上面的yVal=“…”所示,使用
vector
vector
的二进制表达式存在问题

该算法要做的是在两个图
x(t)
y(t)
上画一条线,然后抓住
x(t)
y
坐标,并将其转换为一个新的向量。在第二个过程中,它将
x(t)
坐标与
y(t)进行比较
x
协调抓取
y
协调。当
x(t)
的x和
y(t)
x
不匹配时,需要执行
yVal
=算法


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


yVal是一个指向双精度向量的点(顺便说一句,你几乎肯定不会使用它),而不是一个值

yVal=xp[c-1]+..


yVal是指向双精度向量的一个点(顺便说一句,你几乎肯定不会使用它)不是一个值

在你的代码中有一些神秘之处,但像这样的东西希望能让你开始。我删除了指向-
向量
的指针,并在行中添加了一些注释来解释我的更改

-(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();
}
void userShow(){
//我假设x.graphPoints只是一些'std::vector',您只想在本地使用它
//如果x.graphPoints返回“std::vector*”(指向向量的指针),
//您可能应该修改类/struct/which,以便只使用向量,
//不是指向向量的指针
向量&xp=x.graphPoints;
//y.图点同上
向量&yp=y.graphPoints;
//您几乎从不使用指向容器的指针,也不使用新的
这是C++中的非典型实践。
/* 
xVal=新向量();
yVal=新向量();
xyVal=新向量();
*/
//相反,只需在堆栈上创建向量
std::向量xVal,yVal,xyVal;
std::vector::it迭代器;
//这些已更改为不使用->成员表示法,因为我们没有
//不再使用指针了
for(it=xp.begin();it!=xp.end();++it){
xVal.推回(it->y);
xxVal.push_back(it->x);//我不知道xxVal是什么?我想是xyVal?
//xyVal.push_back(it->x);//像这样吗?
}
//您可以使用这种类型的循环遍历向量,或者
//如上所述使用迭代器
对于(int i=0;i//(c-1)你的代码中有一些神秘之处,但像这样的东西希望能让你开始。我删除了指向-
vector
的指针,并添加了一些注释来解释我的更改

-(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();
}
void userShow(){
//我假设x.graphPoints只是一些'std::vector',您只想在本地使用它
//如果x.graphPoints返回“std::vector*”(指向向量的指针),
//您可能应该修改类/struct/which,以便只使用向量,
//不是指向向量的指针
向量&xp=x.graphPoints;
//y.图点同上
向量&yp=y.graphPoints;
//您几乎从不使用指向容器的指针,也不使用新的
这是C++中的非典型实践。
/* 
xVal=新向量();
yVal=新向量();
xyVal=新向量();
*/
//相反,只需在堆栈上创建向量
std::向量xVal,yVal,xyVal;
std::vector::it迭代器;
//这些已更改为不使用->成员表示法,因为我们没有
//不再使用指针了
for(it=xp.begin();it!=xp.end();++it){
xVal.推回(it->y);
xxVal.push_back(it->x);//我不知道xxVal是什么?我想是xyVal?
//xyVal.push_back(it->x);//像这样吗?
}
//您可以使用这种类型的循环遍历向量,或者
//如上所述使用迭代器
对于(int i=0;i//(c-1)
x.graphPoints
返回什么?第一个图形上x(t)的点。@birryrree为什么要将
new
std::vector
一起使用?避免
new
。如果必须使用指向vector的指针,则可以使用
(*xp)[n]
。然而,首先动态分配一个向量对象是一件非常不寻常的事情。@高炉,可能的泄漏?上述明确的泄漏…x.graphPoints
返回什么?x(t)的点在第一个图形上。@birryrree为什么要将
new
std::vector
一起使用?避免
new
。如果必须使用指向vector的指针,则可以使用
(*xp)[n]
。然而,动态分配一个向量对象首先是一件非常不寻常的事情。@blastfull,可能的泄漏?上述明确的泄漏…此评论非常完美。谢谢@birryrree。我很高兴你对所有内容都发表了评论。让我看看我是否可以自己在自己的代码中完成此操作并报告。birrree我们可以打开一个c吗舱室在一起?@JohnRiselvato-走吧