C ++将Vector项目转换为单个字符串错误?

时间:2012-10-29 03:04:36

标签: c++

所以我有一个函数,其中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中所有值的字符串?

1 个答案:

答案 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);