从 std::vector<unsigned char> 初始化 std::string 导致错误

Initialization of std::string from std::vector<unsigned char> causes error

在 C++ 中,我们可以通过
从另一个向量创建一个向量 std::vector<unsigned char> tmp_1 { &some_vector[i] , &some_vector[j] };

问题:有什么方法可以为 std::string 做同样的事情吗?
类似于:

std::string tmp2 { &some_vector[i] , &some_vector[j] };

尝试使用文档中的构造函数总是return错误;

注: *some_vector 是无符号字符的向量

UPD:找到答案:打字错误,因此尝试访问 [-1] 元素。

这个:

std::string tmp2 { &some_vector[i] , &some_vector[j] };

应该适用于 std::vector 但我更喜欢更具可读性和更安全的解决方案:

std::string tmp2 { std::next( some_container, i ) , std::next( some_container.begin(), j ) };

它应该适用于任何类型的容器,可以转换为 char。例如,如果您或其他人以后出于某种原因决定将 std::vector<char> 替换为 std::deque<char>,您的程序将突然变得更加危险,因为 &container[i].

std::stringseveral constructors,其中一些可用于从std::vector构造字符串,例如:

// using a char* pointer and a size...
std::string tmp2( reinterpret_cast<char*>(&some_vector[i]), j-i );

// using char* pointers as iterators...
std::string tmp2( &some_vector[i], &some_vector[j] );

// using vector iterators...
std::string tmp2( some_vector.begin()+i, some_vector.begin()+j );

Live Demo