,所以我将一堆值插入向量(我尝试了具有相同结果的地图),并且我不断在第二个矢量上得到分割故障,这是 vectormin 。我尝试对此进行删节,如果我只使用vectormax,那一切都很好。
由于某种原因,如果我尝试操纵两个向量,我会得到一个分割错误。如果我要征服任何一个,则该程序会正确加载。
我使用的是一个3.5MB文件,每行1000行和362个值。
std::vector<float> vectorMax, vectorMin;
void Parser::isMaxMinVector(float value, int index){
//if the index of the vector is not yet used
if (index >= vectorMax.size()){
vectorMax.push_back(value);
}
if(index >= vectorMin.size()){
vectorMin.push_back(value);
}
//if new vector is larger, then overwrite it
//if(vectorMax[index] > value) vectorMax[index] = value;
//if(vectorMin[index] < value) vectorMin[index] = value;
}
void Parser::parseLine(char* line){
std::vector<float> vectors;
char* point;
char* tk1 = strtok(line, ",");
char* tk2 = strtok(NULL, ",");
int i=0;
if(tk1 == NULL || tk2 == NULL) return;
float x = strtof(tk1, NULL);
float y = strtof(tk2, NULL);
XYPair pair = XYPair(x, y);
isMaxXY(x,y);
while(point=strtok(NULL, ",")){
//convert the token to float
float f_point = strtof(point, NULL);
//push the float to the vector
vectors.push_back(f_point);
isMaxMinVector(f_point, i);
i++;
}
}
您几次更改了帖子的代码。尽管如此,此代码段
if (index >= vectorMax.size()){
vectorMax[index] = value;
}
是无效的,因为您使用索引> = size()的不存在元素。我认为你的意思是
if ( !vectorMax.empty() && index < vectorMax.size()){
vectorMax[index] = value;
}
或应用成员功能调整大小。例如
if (index >= vectorMax.size()){
vectorMax.resize( index + 1 );
vectorMax[index] = value;
}
您是否对向量进行了尺寸,以便他们分配了足够的存储空间?IIRC运算符[]没有调整大小,如果该元素没有值,则其不确定的行为。如果您想要一些稀疏的东西,则必须使用地图之类的东西。
我认为莫斯科的vlad答案是正确的。
if (index >= vectorMax.size()){
vectorMax[index] = value;
}
如果您不触摸其他任何地方的向量,这将起作用:
//if the index of the vector is not yet used
if (index >= vectorMax.size()){
vectorMax.push_back(value);
// update index here:
index = vectorMax.size();
}
if(index >= vectorMin.size()){
vectorMin.push_back(value);
// and here:
index = vectorMax.size();
}
//if new vector is larger, then overwrite it
if(vectorMax[index] > value) vectorMax[index] = value;
if(vectorMin[index] < value) vectorMin[index] = value;
但是,问题是在索引更改的情况下,index
值不会更新。您可以通过在插入签名中使用int &index
来更改它。弗拉德的方法要好得多。另一方面,尚不清楚向量中的其他元素包含的内容(如果您可以创建vectorMin
伪像,例如)。