当我尝试使用cout从打印切换到命令行以使用stringstream和streamstring.str()将其设置为字符串时,我遇到了这个问题。我的代码如下:
string Similarity::maxJaccard(){
double currentJaccardValue(0.0);
double maxJaccardValue(0.0);
int index1(0);
int index2(0);
double jaccardNumerator(0.0);
double jaccardDenominator(0.0);
stringstream ss;
vector<int> compareToVector;
vector<int> compareAgainstVector;
for(unsigned int i = 0; i < containingVector.size(); i++){
compareToVector = containingVector.at(i);
index1 = i;
jaccardDenominator = compareToVector.size();
for(unsigned int j = 0; j < containingVector.size(); j++){
jaccardNumerator = 0.0;
if(i != j){
compareAgainstVector = containingVector.at(j);
index2 = j;
for(unsigned int k = 0; k < compareToVector.size(); k++){
if(compareToVector.at(k) == compareAgainstVector.at(k)){
jaccardNumerator = jaccardNumerator + 1.0;
}
}
currentJaccardValue = jaccardNumerator/jaccardDenominator;
if(currentJaccardValue >= maxJaccardValue){
maxJaccardValue = currentJaccardValue;
if(index1 < 10){
ss << "New Maximum at: " << index1 << " " << index2 << " " << printVector(compareToVector) << " " << printVector(compareAgainstVector) << " " << currentJaccardValue << "\n";
}else if(index2 < 10){
ss << "New Maximum at: " << index1 << " " << index2 << " " << printVector(compareToVector) << " " << printVector(compareAgainstVector) << " " << currentJaccardValue << "\n";
}else{
ss << "New Maximum at: " << index1 << " " << index2 << " " << printVector(compareToVector) << " " << printVector(compareAgainstVector) << " " << currentJaccardValue << "\n";
}
}
}else{
}
}
}
string s = ss.str();
return s;
}
printVector是一个简单的for循环,用于遍历每个向量中的项目并将它们作为字符串返回。返回一个字符串。
string Similarity::printVector(vector<int> vector){
ostringstream ss;
string s = "( ";
for(unsigned int i = 0; i < vector.size(); i++){
ss << (vector.at(i));
ss << " ";
} s+= ss.str();
s+= ")";
return s;
}
当我编译并运行时,我得到了一个
Segmentation fault (core dumped)
当代码只使用cout时,它运行得非常好。我不太清楚为什么使用cout的streamstring会导致这种情况。
感谢所有帮助, 提前谢谢。
*编辑:为清晰起见而编辑。