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