将向量复制到 std::string

Copying vector to std::string

本文关键字:string std 向量 复制      更新时间:2023-10-16

谁能向我解释为什么下面的代码无法正常工作?没有编译问题,但输出错误。我想问题出在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)的数值为 1。char('1')在 ASCII 中的数值为 49。

此外,由于您要在字符串末尾将字符插入到test中,请考虑使用std::back_inserter而不是std::inserter(无论哪种方式,您都不需要测试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());