从 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::string
有several 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 );
在 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::string
有several 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 );