C++ C++;推回覆盖最后一个向量元素

C++ C++;推回覆盖最后一个向量元素,c++,vector,push-back,C++,Vector,Push Back,由于我无法在提问后的8小时内回答自己的问题,我将在这里发布我的解决方案 在传入通道编号和向量元素编号中出错。设置通道-1的值,而不是通道修复问题 我的新职能如下: void input(long inlet, t_symbol *s, long ac, t_atom *av){ // GET VARIABLES long channel = atom_getlong(av); double value = atom_getfloat(av + 1); long v

由于我无法在提问后的8小时内回答自己的问题,我将在这里发布我的解决方案

在传入通道编号和向量元素编号中出错。设置通道-1的值,而不是通道修复问题

我的新职能如下:

void input(long inlet, t_symbol *s, long ac, t_atom *av){
    // GET VARIABLES
    long channel = atom_getlong(av);
    double value = atom_getfloat(av + 1);
    long v_size = v_chan.size();
    if(channel && v_size < channel){
        for(int i = v_size; i < channel; i++){
            v_chan.push_back(n_chan);
        }
        v_chan[channel - 1].value = value;
    }
    else if(channel){
        v_chan[channel - 1].value = value;
    }
}
void输入(长入口、t_符号*s、长交流、t_原子*av){
//获取变量
长通道=原子长(av);
双值=atom_getfloat(av+1);
长v_size=v_chan.size();
if(通道和v_尺寸<通道){
对于(int i=v_size;i

我有一个包含结构的向量,我喜欢用一个新的空结构将它推回。
示例代码:

struct channels{
  double value;
  // eventually more variables
};

vector<channels> v_chan;
channels n_chan;

void push(){
  v_chan.push_back(n_chan);
}
struct通道{
双重价值;
//最终会有更多的变量
};
vector v_chan;
陈恩佑频道;
无效推送(){
v_chan.推回(n_chan);
}
问题是,如果我的向量包含元素,则向后推以添加元素,但也会覆盖最后一个元素

例如,如果我的向量大小为1,元素0的值为0.2,则推回后,我的向量大小为2,但元素0和1的值为0

我做错了什么

实代码:(MAX/MSP外部,函数输入在MAX中调用)

#包括
#包括
#包括
#包括
使用名称空间std;
结构绑定{
字符串参数;
双*值;
国际音轨;
双基;
双乘数;
};
结构通道{
双重价值;
载体结合;
};
vector v_chan;
向量v_结合(19);
陈恩佑频道;
类记录:公共MaxCpp6{
公众:
rec(t_符号*sym,长交流,t_原子*av){
setupIO(1,1);//入口/出口
}
~rec(){}
//方法:
//集合绑定函数
空隙收进(长入口、t_符号*s、长ac、t_原子*av){
}
无效输出(长轨道、长类型){
}
无效输入(长入口、t_符号*s、长ac、t_原子*av){
//获取变量
长通道=原子长(av);
双值=atom_getfloat(av+1);
长v_size=v_chan.size();

如果(v_size你做错的是你没有向我们展示真正的代码。创建一个.Added,但它不是自包含的,因为代码是针对Max外部的。变量通道和值是从Max接收的,主函数只注册其他函数,以便Max可以使用它们。如果没有自包含的示例,我们就看不到还有什么要做的ng on!正如Daniel所说:您需要创建一个!真正的代码现在是直接复制粘贴。我不能提供任何其他内容,因为它是针对Max external的。您可以编译它,但您将无法运行它,除非您有Max/MSP。@user2899919而不是直接复制粘贴,您可以编写不同的代码来重现问题。Th通常SSCCE就是这样的:“我在大型复杂代码库中遇到了一个问题,我无法向您展示——因此我编写了一个小测试程序,它展示了相同的问题,我可以展示”
#include <maxcpp6.h>
#include <string>
#include <algorithm>
#include <vector>

using namespace std;

struct bind{
    string param;
    double* value;
    int track;
    double base;
    double multiplier;
};

struct channels{
    double value;
    vector<int> bind;
};

vector<channels> v_chan;
vector<bind> v_bind(19);
channels n_chan;

class rec : public MaxCpp6<rec> {
public:
rec(t_symbol * sym, long ac, t_atom * av) {
    setupIO(1, 1); // inlets / outlets
}
~rec() {}

// methods:


//SET BIND FUNCTION
void setBind(long inlet, t_symbol *s, long ac, t_atom *av){
}

void output(long track, long type){

}

void input(long inlet, t_symbol *s, long ac, t_atom *av){
    // GET VARIABLES
    long channel = atom_getlong(av);
    double value = atom_getfloat(av + 1);
    long v_size = v_chan.size();
    if(v_size <= channel){
        v_chan.push_back(n_chan);
    }
    else{
        v_chan[channel].value = value;
    }
}

void dump(long inlet){
    for(int i = 1; i <= v_chan.size(); i++){
        post("%d %.2f", i, v_chan[i].value);
    }
}

    void clearTrackBinds(long inlet){

    }

    void reset(long inlet){
        clearTrackBinds(0);
    }
};

C74_EXPORT int main(void) {
    // create a class with the given name:
    rec::makeMaxClass("solar_receiver");
    REGISTER_METHOD_GIMME(rec, input);
    REGISTER_METHOD_GIMME(rec, setBind);
    REGISTER_METHOD(rec, dump);
    REGISTER_METHOD(rec, clearTrackBinds);
    REGISTER_METHOD(rec, reset);
}