0

所以我有一个函数,一个被调用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按预期返回一个包含所有值的字符串?

4

1 回答 1

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接受 achar作为其参数,并且您传递的是int转换为 char 的 a (尽管在这种情况下我希望编译器会发出警告)。

PS:同样适用于线路

  std::string key = "" + temp.at(0);
于 2012-10-29T03:11:14.467 回答