所以我有一个函数,其中KaylesPosition
是一个名为vector<int>
piles
的类:
// Produces a key to compare itself to equivalent positions
std::string KaylesPosition::makeKey(){
std::vector<int> temp(piles.size());
for (int i = 0;i<piles.size();i++){
temp[i]=piles[i];
}
std::sort (temp.begin(),temp.end());
std::string key = "" + temp.at(0);
for (int i=1 ; i<temp.size() ; i++){
key.push_back('.');
key.push_back(temp.at(i));
}
return key;
}
我的预期输出应该是piles
中的所有元素,按句点分隔。但是,我将key
作为“_M_range_check”返回。我已经尝试使用std :: string.append(),我得到一个空字符串或句点。如何使此函数按预期返回piles
中所有值的字符串?
答案 0 :(得分:1)
问题似乎在这里:
key.push_back(temp.at(i));
您尝试将整数附加到字符串而不首先获取整数的字符串表示形式。尝试用以下代码替换该行:
key += std::to_string(temp.at(i)); // This will only work if your compiler supports C++11
如果你的编译器不支持C ++ 11,试试这个(别忘了#include <sstream>
):
std::ostringstream o;
o << temp.at(i);
key += o.str();
或者,如果您可以选择使用Boost(http://boost.org/),请尝试使用lexical_cast:
key += boost::lexical_cast<std::string>(temp.at(i));
首先编译此代码的原因是因为push_back
接受char
作为其参数,并且您传递的int
转换为char(尽管我会在这种情况下期望编译器发出警告。)
P.S。:同样适用于
行 std::string key = "" + temp.at(0);