繁体   English   中英

复制向量到std :: string

[英]Copying vector to std::string

谁能向我解释为什么下面的代码无法正常工作? 没有编译问题,但输出错误。 我猜问题出在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;
}

您正在向量中插入非可视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)的数值为char('1') ASCII数值为49。

另外,由于您要在字符串的末尾插入字符到test中,因此请考虑使用std::back_inserter而不是std::inserter vec.empty()无论哪种方式,您都不需要测试vec.empty()因为标准算法可以正常工作使用迭代器范围,其中begin == end ):

std::string test;
std::copy(vec.begin(), vec.end(), std::back_inserter(test));

或者,只需使用将迭代器作为输入的std::string构造函数:

std::string test(vec.begin(), vec.end());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM