复制向量到std :: string

时间:2019-04-30 21:59:43

标签: c++ string vector copy

任何人都可以向我解释为什么下面的代码无法正常工作吗?没有编译问题,但输出错误。我猜问题出在std::inserter之内。

程序输出:

预期输出:147497

#include <vector>
#include <string>
#include <algorithm>

int main()
{
  std::vector<char> vec;
  vec.push_back(1);
  vec.push_back(4);
  vec.push_back(7);
  vec.push_back(4);
  vec.push_back(9);
  vec.push_back(7);

  std::string test;

  if (!vec.empty())
  {
    std::copy(vec.begin(),vec.end(),std::inserter(test,std::end(test)));
   }
  std::cout << test;
}

1 个答案:

答案 0 :(得分:3)

您正在将非可视ASCII控制字符插入到向量中。您需要插入可见的ASCII字符:

// note the use of single quotes!
vec.push_back('1');
vec.push_back('4');
vec.push_back('7');
vec.push_back('4');
vec.push_back('9');
vec.push_back('7');

char(1)的数值为1。char('1')的ASCII数值为49。

此外,由于您要在字符串末尾的test中插入字符,因此请考虑使用std::back_inserter而不是std::inserter(无论哪种方式,您都不需要测试{ {1}}是标准算法,在vec.empty()的迭代器范围内可以很好地工作:

begin == end

或者,只需使用将迭代器作为输入的std::string test; std::copy(vec.begin(), vec.end(), std::back_inserter(test)); 构造函数:

std::string