[英]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.