C++ 正在将向量复制到std::string

C++ 正在将向量复制到std::string,c++,string,vector,copy,C++,String,Vector,Copy,有人能解释一下为什么下面的代码不能正常工作吗?没有编译问题,但输出错误。我想问题在于std::inserter 程序输出: 预期产出:147497 #包括 #包括 #包括 int main() { std::vec; 向量推回(1); 向量推回(4); 向量推回(7); 向量推回(4); 向量推回(9); 向量推回(7); 字符串测试; 如果(!vec.empty()) { std::copy(vec.begin(),vec.end(),std::inserter(test,std::end(t

有人能解释一下为什么下面的代码不能正常工作吗?没有编译问题,但输出错误。我想问题在于
std::inserter

程序输出:

预期产出:147497

#包括
#包括
#包括
int main()
{
std::vec;
向量推回(1);
向量推回(4);
向量推回(7);
向量推回(4);
向量推回(9);
向量推回(7);
字符串测试;
如果(!vec.empty())
{
std::copy(vec.begin(),vec.end(),std::inserter(test,std::end(test));
}

std::cout您正在向向量中插入非可视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

此外,由于您在字符串末尾将字符插入到代码>测试< /代码>中,考虑使用<代码> STD::BuffySuxter < /C> >而不是<代码> STD::插入器< /代码>(无论哪种方式,您不需要测试<代码> VEC .EMPTY()/代码>作为标准算法,在迭代器范围内使用“代码>开始= =结束< /代码>):

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

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

1
不是字符。@Quimby它肯定是
char
的有效值。这些都是没有标准图示符的ASCII字符值-显示什么(如果有)将取决于您运行程序的方式。您肯定不会得到
147497
True,错误的措辞-转换为字符串时仍然不会生成预期的输出。为什么不
std::string test(vec.begin(),vec.end());
std::string test(vec.begin(), vec.end());